Mysql之执行计划

1.  查询的执行过程

    1.  第一个阶段(SQL解析器)

        SQL解析

          由Mysql服务器的SQL解析器负责处理,若SQL语句存在语法错误,则可在该阶段得到检测。经过SQL解析后,最终形成SQL解析树。

          Mysql服务器使用SQL解析树而非SQL语句本身以执行查询。

    2.  第二个阶段(SQL优化器)

        SQL优化

          删除不必要的条件,将复杂运算简单化

          若存在多表连接,则确定读表顺序

          根据用于各数据表的条件与索引统计信息,确定要使用的索引

          将获取的记录放入临时表,确定是否需要再次加工

          经历第二阶段以后,获取最终执行计划

    3.  第三个阶段

        读取记录

          依据执行计划向存储引擎请求读取记录

    4.  第一个阶段,第二个阶段都是由mysql引擎处理的,第三个阶段由mysql引擎与存储引擎同时参与处理    

        

2.  优化器种类

    1.  基于代价的优化器CBO

        基于代价的优化器处理查询时会创建多种可用方法,然后根据各种处理的消耗信息与目标数据表的统计信息,计算各执行计划代价,最后从中选择代价最小的执行计划作为最终执行计划                         

    2.  基于规则的优化器RBO

         几乎没有各数据表或索引的统计信息,相对较慢的CPU计算会导致代价计算过程负荷较重,现在几乎不再使用

3.  统计信息

    1.  开启统计信息

        1.  创建表时,直接指定参数

            create table test(id int ,name varchar(50),primary key(id)) engine=innodb stats_persistent=1;

            stats_persistent

              1  表示将数据表的统计信息保存到mysql.innodb_index_stats与innodb_table_stats表

              0  表示不保存

        2.  如果创建表不指定参数,是否保存统计信息由innodb_stats_persistent系统变量决定

    2.  什么时候收集数据表的统计信息

        1.  打开新的数据表时

        2.  大量修改数据表的记录时(在数据表的全部记录中执行1/16的UPDATE,INSERT,DELETE时)

        3.  执行ANALYZE table命令时

        4.  执行show table status或show index from命令时

        5.  激活innodb监视器时

        6.  innodb_stats_on_metadata系统设置为ON并执行show table status命令时        

4.  执行计划分析

    1.  使用EXPLAIN命令查看执行计划

 

                                                          

posted @ 2023-06-08 10:30  奋斗史  阅读(30)  评论(0)    收藏  举报