MySQL基本组成SQL执行流程查询缓存当一个SQL执行时首先会进入查询缓存 查看之前是否执行过该语句,如果执行过则会以key-value的形式保存在缓存中,key是查询语句,value是查询结果 如果缓存命中则直接返回结果,如果查询语句不在缓存中继续后面的流程 大多数情况下我们不推荐使用查询缓存,因为缓存失效非常频繁,只要一个更新,那么这个表上所有的缓存都会失效,吐过数据的更新比较多,那么缓冲命中的效率很低,不断的在失效 在MySQL中提供了参数 query_cache_type 参数来设置,默认是 DEMAND ,表示对默认的SQL都不使用查询缓存,如果要对特的语句进行缓存查询,则可以使用 SQL_CACHE 来显示的指定,如 select SQL_CACHE * from T where ID=1; 在MySQL8.0 开始,查询缓存整个功能模块已经删除掉不再拥有
分析器优化器对我们的SQL进行优化,得到更高的执行计划 如有多个索引时确定要用那个索引 当有多变联查join 时,查询表的顺序 对查询条件和语句的优化
执行器Buffer Pool[server] innodb_buffer_pool_size = 2147483648
数据页MySQL中对数据进行抽象,按照数据页的形式来存放到文件,当查询时,首先定位到要查询数据所在的数据页,之后将整个数据页加载到Buffer Pool 中, 数据页默认的大小是 16KB , 也就是一页数据包含16KB 的数据 在BufferPool 中的数据页一般我们叫缓存页,默认情况下缓存页与磁盘上的数据页大小是对应的 对于每个缓存页都有一个描述信息 描述信息包括:数据页的所属表空间,数据页的标号,这个缓存页在Buffer Pool 中的内存地址以及其他一些信息 在 Buffer Pool 中,所有的描述信息都在最前面,然后各个缓存页放在后面
表空间平时我们创建张表时都会在磁盘上对应着一个表名.ibd , 这样的磁盘数据文件,这就是表空间的概念和物理体现 对于一些系统表空间可能存在着对应多个磁盘文件,我们自己创建的表对应的表空间一般都是对应一个 表名.ibd 的数据文件
数据区在表空间中有太多的数据页不好管理,这是引入了数据区的概念,英文:extent 一个数据区中有连续的64 个数据页,每个数据页16kb , 所以每个数据区大小是1MB 同时265 个数据区被划分为一组 在表空间中第一组数据区的第一个数据区的前三个数据页是固定的,存放一些特殊的描述性的信息 表空间中其他各组数据区的第一个数据区的头两个数据页都是存放特殊信息的
本文由AnonyStar 发布,可转载但需声明原文出处。
|