MySQL查询优化一
多数情况下,我们知道索引能够提高查询效率,但应该如何建立索引?索引的顺序如何?许多人却只知道大概。其实理解这些概念并不难,而且索引的原理远没有想象的那么复杂。
建立索引的几大原则
最左前缀匹配原则
简单定义:
MySQL会一直向右匹配直到遇到范围查询 (>,<,between,like)
就停止匹配.
所以在针对查询条件进行创建索引时,要将范围级的条件放到索引字段的最后。以让 MySQL
使用索引。
查询优化器
理论上来说 索引对顺序很敏感,但是MySQL的查询优化器会自动调整where子句的条件顺序以使用适合的索引。这属于编译器层次优化.
举例: 当 where
条件为 a=1 AND b=2 AND c=3
时, 对应建立的索引 (a,b,c)
列可以以任意顺序建立
选择区分度高的列
如果列的区分度很小,那么为这个列创建索引就不太合适了。比如 性别、某些状态字段之类的。
有个计算公式:
1 | count(distinct col) / count(*) |
一般要求 0.1
以上 参考此处
索引列不参与计算
当为某列数据加上索引之后, 不能将该列直接参与计算。因为索引源数据中存的都是字段值, 使用计算时需要将所有的字段进行计算之后才能比较。 这样的情况 可以先对条件进行计算,比较计算后的值。
尽量扩展索引
当表中已经存在索引,需要新增索引列时,优先考虑在原有的索引上进行增加。
如: 已存在索引 (a)
, 需要增加联合索引 (a,b)
时, 可以直接在原索引上修改。
但如果需要添加的另外的与当前索引列无关的索引时,需要另外创建。
参考资料
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Ikaros の小屋!
评论