mysql查询优化分析之执行过程的优化

执行过程的优化    

1、查询缓存       

2、查询优化处理  : 
                                  A、语法解析器和预处理   
                                  B、查询优化器 CBO(成本)、RBO(规则):

(1)、select count(*)from film_actor;show status like ‘last_query_cost’;可以看到这条查询语句大概需要做1104个数据页才能找到对应的数据,这是经过一系列的统计信息计算来的  

        a、每个表或者索引的页面个数  

        b、索引的基数  

        c、索引和数据行的长度  

        d、索引的分布状况
(2)、在很多情况下 mysql会选择错误的执行计划,原因如下:
      a、统计信息不准确  
      b、执行计划的成本估算不等于实际的执行的成本 
      c、mysql的最优可能跟你想的不一样 
      d、mysql不考虑其他并发执行的查询 
      e、mysql不会考虑不受其控制的操作成本(存储过程、自定义函数)
(3)、优化器的优化策略  

        a、静态优化 直接对解析树进行优化,并完成优化   
         b、动态优化 动态优化与查询的上下文有关,也可能跟取值、索引对应的行数有关
        c、mysql对查询的静态优化只需要一次,但对动态优化在每次执行时都需要重新评估
(4)、优化器的优化类型 
        a、重新定义关联表的顺序 
        b、将外连接转化为内连接,内连接的效率要高于外连接 
         c、使用等价变换规则,mysql可以使用一些等价变化规则来简化并规划表达式 
        d、优化count()、min()、max() 
        e、预估并转化为常数表达式,当一个mysql检测到一个表达式可以转化为常数的时候,就会一直把该表达式作为常数进行处理 
        f、索引覆盖扫描,当索引中的列包含所有查询中需要使用的列的时候,可以使用覆盖索引  
        g、子查询优化   
        h、等值传播
(5)、关联查询        JOIN的实现方式原理
(6)、排序优化        排序算法  

        a、两次传输排序         占空间小 
        b、 单次传输排序        占空间大   
        c、当需要排序的列的总大小加上orderby的列大小超过max_length_for_sort_data定义的字节,mysql会选用双次排序,反之使用单次排序,当然,用户可以设置此参数的值来选择排序的方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值