mysql高性能索引(Ⅰ)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql高性能索引(Ⅰ)相关的知识,希望对你有一定的参考价值。

在开发中,我们知道大多数应用的瓶颈在于sql语句的执行时耗,在这里并不讨论sql语句的安全,仅仅讨论高性能sql语句,而与高性能sql语句紧密相连的就是传说中的----索引。

索引--一种工作在存储引擎端的用于快速找到记录的一种数据结构。

mysql使用索引的方式是:先找到索引的值,再根据索引的值找到数据行。

索引之B-Tree索引

B-Tree索引通常意味着所有的值都是按顺序存储的,每个叶子节点到根的距离相同。图示:

技术分享

B-Tree索引能够快速的访问数据,因为存储引擎不需要进行全表扫描来获得数据,理论上B-Tree的搜索时间复杂度不超过O(㏒2(M))。

本文测试用例:

表:tbprofitshop 

字段数:15

记录数:20w

关于B-Tree索引的一些限制:

⑴.如果不是按照索引的最左前缀索引,则无法使用索引。主索引:id,普通索引:fdPhone

如:技术分享

而这样则会使用索引:

技术分享

⑵.不能跳过索引中的列。主索引:id,联合索引:(fdPhone,fdCreate),如:

技术分享

此处跳过fdPhone而直接利用fdCreate,查询则无法使用索引。

  ⑶.如果查询中有某列的范围查询,则其右边所有列都无法使用索引优化查询。主索引:id,联合索引:(fdPhone,fdCreate)。如:

技术分享

注:在开发中,经常看见数字类型的字符串,然后大火就直接使用数字类型了。数据应与字段类型匹配,在这个例子中fdPhone是字符类型,我们以数字类型使用看看如何:

技术分享 

再以字符串类型来看看是怎样的:

技术分享  

ALL:在索引构建中,索引构建的顺序似乎很重要,它往往是索引高效与否的关键所在。

本文出自 “岁月” 博客,请务必保留此出处http://moron.blog.51cto.com/9245572/1782567

以上是关于mysql高性能索引(Ⅰ)的主要内容,如果未能解决你的问题,请参考以下文章

mysql之高性能索引

如何构建高性能MySQL索引

高性能MySQL-第五章创建高性能的索引

《高性能MySQL》读书笔记之创建高性能的索引

如何构建高性能MySQL索引

Mysql优化之创建高性能索引