在开发中,我们知道大多数应用的瓶颈在于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
原文地址:http://moron.blog.51cto.com/9245572/1782567