标签:优化器 解决 pre 分析器 auto 通过 cache isa 链接
1.客户端先通过连接器连接到Mysql服务器。
2.连接器权限验证通过之后,先查询是否有查询缓存。若之前执行过此语句有缓存,则直接返回缓存数据,否则直接进入分析器。
3.分析器会对查询语句进行语法分析和词法分析,判断SQL语法是否正确。如果查询语法错误就直接返回错误信息给客户端。若语法正确则进入优化器。
4.优化器对查询语句进行优化处理,例如一个表中包含多个索引,优化器会判别哪个索引性能更好。
5.优化器执行完就进入执行器,执行器就开始执行语句进行查询比对,直到满足条件的所有数据查询完毕,然后返回数据。
此错误是执行到分析器阶段,因为Mysql在此阶段会检查SQL语句的正确性。
MySQL查询缓存功能是在连接器链接MySQL服务器之后发生的。
优点:效率高,如果有缓存则直接返回缓存数据。
缺点:失效太频繁导致缓存命中率比较低,任何更新表操作都会清空查询缓存,因此导致查询缓存非常容易失效。
MySQL 查询缓存默认是开启的,配置 querycachetype 参数为 DEMAND(按需使用)关闭查询缓存。
MySQL 8.0 之后直接删除了查询缓存的功能。
可以针对不同的表设置不同的引擎。在 create table 语句中使用 engine=引擎名(比如Memory)来设置此表的存储引擎。
完整代码如下:
create table student(
id int primary key auto_increment,
username varchar(120),
age int
) ENGINE=Memory
MySQL 的常用引擎有 InnoDB、MyISAM、Memory 等。
MySQL 5.5.5 版本开始 InnoDB 就成为了默认的存储引擎
InnoDB 和 MyISAM 最大的区别是InnoDB 支持事务,而 MyISAM 不支持事务。
主要区别:
1.InnoDB 支持崩溃后安全恢复,MyISAM 不支持崩溃后安全恢复。
2.InnoDB 支持行级锁,MyISAM 不支持行级锁,只支持到表锁。
3.InnoDB 支持外键,MyISAM 不支持外键。
4.MyISAM 性能比 InnoDB 高。
5.MyISAM 支持 FULLTEXT 类型的全文索引,InnoDB 不支持 FULLTEXT 类型的全文索引,但是 InnoDB 可以使用 sphinx 插件支持全文索引,并且效果更好。
6.InnoDB 主键查询性能高于 MyISAM。
1.插入缓冲(insert buffer):对于非聚集索引的插入和更新,不是每一次直接插入索引页中,而是首先判断插入的非聚集索引页是否在缓冲池中,如果在,则直接插入,否则,先放入一个插入缓冲区中。好似欺骗数据库这个非聚集的索引已经插入到叶子节点了,然后再以一定的频率执行插入缓冲和非聚集索引页子节点的合并操作,这时通常能将多个插入合并到一个操作中,这就大大提高了对非聚集索引执行插入和修改操作的性能。
2.两次写(double write):两次写给 InnoDB 带来的是可靠性,主要用来解决部分写失败(partial page write)。doublewrite 有两部分组成,一部分是内存中的 doublewrite buffer ,大小为 2M,另外一部分就是物理磁盘上的共享表空间中连续的 128 个页,即两个区,大小同样为 2M。当缓冲池的作业刷新时,并不直接写硬盘,而是通过 memcpy 函数将脏页先拷贝到内存中的 doublewrite buffer,之后通过 doublewrite buffer 再分两次写,每次写入 1M 到共享表空间的物理磁盘上,然后马上调用 fsync 函数,同步磁盘。如下图所示:
3.自适应哈希索引(adaptive hash index):由于 InnoDB 不支持 hash 索引,但在某些情况下 hash 索引的效率很高,于是出现了 adaptive hash index 功能, InnoDB 存储引擎会监控对表上索引的查找,如果观察到建立 hash 索引可以提高性能的时候,则自动建立 hash 索引。
如果这张表的引擎是 MyISAM,那么 ID=4,如果是 InnoDB 那么 ID=2(MySQL 8 之前的版本)。
以下情况会导致 MySQL 自增主键不能连续:
唯一主键冲突会导致自增主键不连续
事务回滚也会导致自增主键不连续
标签:优化器 解决 pre 分析器 auto 通过 cache isa 链接
原文地址:https://www.cnblogs.com/alinbling/p/11600897.html