十五、执行计划(explain)

十五、执行计划(explain)

1、命令格式

explain  查询语句

2、命令作用

  1. 展示当前查询得到结果是否通过索引来进行定位
  2. DBA(数据库管理员)通过执行计划了解在本次查询过程,是否使用预先创建好的素引

3、执行计划对于查询语句执行效率判断

  1. 在执行计划中,通过type属性展示查询语句执行效率

  2. 执行效率分类(type列):[慢—>快]

    1. All:where对表文件所有数据行进行遍历,才得到了查询结果

      1. 这种级别查询语句,随着数据行增加导致执行速度大幅度降低
      2. 对于DBA(数据库管理员)来说,应当极力避免这种级别的查询
    2. index:where对表文件所有数据行进行遍历,只不过在 select抓取字段内容时,从索引中抓取

      1. 这种级别虽然在抓取数据速度有所提升,但依然面临随着数据行增加导致执行速度大幅降低

      2. 对于DBA(数据库管理员)来说,应当极力避免这种级别的查询

      3. explain select * from emp; -- type:all
        
        -- 给表emp的ename字段创建一个索引
        create index ename_index on emp(ename); 
        
        -- type:index,此时对于查询速度提升实际上是非常微小的
        explain select ename from emp;
        
    3. range:where不会对表文件数据行进行遍历,而是直接从索引得到定位的数据行行数,这将大幅度提升查询效率

      1. 这是DBA(数据库管理员)进行SQL优化时要保证的最低级别

      2. 但是这种级别存在不稳定性,当字段发生变化时会导致索引失效

      3. -- type:all;rows:14(总14条)
        explain select * from emp where sal<=1000; 
        
        -- 给表emp的sal字段创建一个索引
        create index sal_index on emp(sal);
        
        -- 在此执行第一条查询语句,type:range;rows:2(总14条)
        explain select * from emp where sal<=1000;
        
      4. MySql服务器如果发现从索引得到数据行行数达到了表文件总行数1/3(新版本2/3)时,此时考虑运行成本问题就会放弃使用索引

        1. -- sal<=1250的数据超过了总数据的1/3(总14条)
          -- 此时type:all;rows:14
          explain select from emp where sal<=1250;
          
    4. ref:where不会对表文件数据行进行遍历,而是直接从索引得到定位的数据行行数,同时在这种情况根据定位条件一次只能得到一个数据行,属于比较稳定执行效率。对于DBA(数据库管理员)来说,这是要努力达到的优化程度

      1. -- 确保ename='smith'只有一个!这时type:ref;rows:1
        explain select * from emp where ename='smith';
        
    5. const:根据主键字段上的索引进行定位,执行效率最快。但是在实际使用过程中,几乎不会被用到

      1. -- empno是主键;这时type:const;rows:1
        explain select * from emp where empno=7369;
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纯纯的小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值