MySQL索引原理及慢查询优化
Posted blogfortang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL索引原理及慢查询优化相关的知识,希望对你有一定的参考价值。
参考文章:
MySQL索引原理及慢查询优化
https://tech.meituan.com/2014/06/30/mysql-index.html
MySQL索引背后的数据结构及算法原理
http://blog.codinglabs.org/articles/theory-of-mysql-index.html
mysql的索引是什么?怎么优化?
https://my.oschina.net/liughDevelop/blog/1788148
mysql索引总结----mysql 索引类型以及创建
https://www.jianshu.com/p/7a0c215edb1d
总结:
索引目的
索引的目的在于提高查询效率。
索引原理
依据索引,通过不断的缩小想要获得数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是我们总是通过同一种查找方式来锁定数据。
磁盘IO
提高查询效率的重要手段之一就是要减少IO次数,减少IO次数就要降低B+树的高度,降低B+树的高度就要尽量减少索引字段数据项占的空间,减少索引字段数据项占的空间磁盘块所能存放的索引字段数据项数量就增多,
索引字段数据项数量增多会降低B+树的高度同时增加最底层的叶子节点数量,相同高度的B+树可以存储更多的数据项(其实索引字段数据项(即非叶子节点存储的数据项)与数据项(即叶子节点存放的数据项)是一样的)
最左匹配原则
当b+树的数据项是复合的数据结构,比如(name,age,sex)的时候,b+数是按照从左到右的顺序来建立搜索树的,比如当(张三,20,F)这样的数据来检索的时候,b+树会优先比较name来确定下一步的所搜方向,如果name相同再依次比较age和sex,最后得到检索的数据;但当(20,F)这样的没有name的数据来的时候,b+树就不知道下一步该查哪个节点,因为建立搜索树的时候name就是第一个比较因子,必须要先根据name来搜索才能知道下一步去哪里查询。比如当(张三,F)这样的数据来检索时,b+树可以用name来指定搜索方向,但下一个字段age的缺失,所以只能把名字等于张三的数据都找到,然后再匹配性别是F的数据了, 这个是非常重要的性质,即索引的最左匹配特性。根据该原则以及索引原理可以推知,如果复合数据项的某一子元素如name为空时,在根据下一子元素如age进行检索时,所检索的数据范围会更大(相比较于name不为空时)。
以上是关于MySQL索引原理及慢查询优化的主要内容,如果未能解决你的问题,请参考以下文章