作家
登录

SQL优化器究竟帮你做了哪些工作?

作者: 来源: 2017-12-15 13:09:35 阅读 我要评论

是以我们须要经由过程谓词来肯定索引片的厚度,过滤的值域范围越少,索引片厚度就越窄。那么谓词必定就能匹配到索引么,或者说匹配的规矩是什么?

四、匹配列&过滤列

谓词不必定都能匹配到索引,可以或许匹配上的,我们称之为匹配列。此时它可以介入索引片的定义。

只有匹配列和过滤列可以介入索引片的定义和过滤,其他弗成。

我们来看下谓词匹配的定义:

1、示例

  1. select * from test where user_name=’test1’ and sex>0 and age =10 

发明索引id_name_sex

  1. 逐行检查其索引列(id,user_name,sex)
  2. 起首检查 id,发明where后面的谓词没有与之对应,则 这个索引列以及后面的索引列都长短匹配列
  3. 索引id_name_sex匹配停止,无匹配列

发明索引name_sex_age

  • 逐行检查其索引列(user_name,sex,age)
  • 起首检查 user_name,发明where后面的 谓词 user_name 有与之对应,认定此列为匹配列
  • 检查索引字段sex,发明where后面有谓词sex与之对应,认定此列为匹配列,因为谓词sex是范围谓词,则残剩的索引为非匹配列。
  • 索引列age 是在最后一个匹配列sex 之后,而又有谓词age 与之对应,是以此列 为过滤列,

经由过程这个示例,我们最终肯定了:

  • 匹配索引: name_sex_age
  • 匹配列: user_name,sex
  • 过滤列: age

我们查看下 explain ,和我们分析的对应。

SQL优化器毕竟帮你做了哪些工作?

2、肯定匹配列有什么竽暌姑

肯定匹配列之后我们可以知道当前的萌芽会用到哪些索引,以及匹配到该索引的哪些列,最终可以提前锁定命据的拜访范围,为数据的攫取节俭攫取压力。

相对于没用匹配到索引的萌芽,有匹配列的萌芽,前提过滤是前置的,而没有匹配到索引的萌芽,前提过滤是后置的,即全表扫描之后,再过滤结不雅,如斯磁盘IO压力过大年夜。

别的 “最左匹配”原则也是基于匹配列规矩而来,为何是最左匹配,除了B树的道理之外,还有一个重要的原因,在查对匹配列的时刻,是大年夜头到尾依次检查索引列。

所以对于是否可以或许匹配到索引,where后面的谓词次序不重要,重要的是索引列的次序。

比如:

  1. select * from test where user_name=’test1’ and sex>0 and age =10
  2. select * from test where sex>0 and user_name=’test1’ and age =10
  3. select * from test where age =10 and user_name='test1' and sex>0 

都可以匹配到name_sex_age 索引

  1. //会匹配到5个数据 ​  
  2. sql1:select * from test where sex=1;  

    SQL优化器毕竟帮你做了哪些工作? SQL优化器毕竟帮你做了哪些工作?

    3、复杂谓词

    如不雅值是%xx ,那么将会选择全索引扫描,不介入索引匹配,如不雅是xx%,这会介入索引匹配,选择索引片扫描。


      推荐阅读

      宏碁4K专业显示器开卖:sRGB色域可达130%

    开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散 据外媒报道,宏碁近日推出一款型号为PE320QK Pro的专业显示器,该款显示器屏幕屏幕比例为惯例的16:9设计,大年夜小为31.5英寸,分>>>详细阅读


    本文标题:SQL优化器究竟帮你做了哪些工作?

    地址:http://www.17bianji.com/lsqh/39807.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)