前缀索引要选择足够长的前缀以包管高的选择性,同时又不克不及太长,我们可以经由过程以下方法来计算出合适的前缀索引的选择长度值:
(1)

不走索引排序
如:萌芽用户名以feinik开首的所有效户,这里应用了索引的第一列
注:经由过程以上方法来计算出前缀索引的选择性比值,比值袈浣高解释索引的效力也就越高效。
(2)

注:经由过程以上语句慢慢找到最接近于(1)中的前缀索引的选择性比值,那么就可以应用对应的字符朝长进步长度来做前缀索引了
5.2.2 前缀索引的创建
5.2.3 应用前缀索引的留意点
前缀索引是一种能使索引更小,更快的有效办法,然则MySql无法应用前缀索引做ORDER BY 和 GROUP BY以及应用前缀索引做覆盖扫描。
5.3 选择合适的索引列次序
在组合索引的创建中索引列的次序异常重要,精确的索引次序依附于应用该索引的萌芽方法,对于组合索引的索引次序可以经由过程经验轨则来赞助我们完成:将选择性最高的列放到索引最前列,该轨则与前缀索引的选择性办法一致,但并不是说所有的组合索引的次序都应用该轨则就能肯定,还须要根据具体的萌芽场景来肯定具体的索引次序。
5.4 集合索引与非集合索引
1)、集合索引
集合索引决定命据在物理磁盘汕9依υ?理排序,一个表只能有一个集合索引,如不雅定义了主键,那么InnoDB会经由过程主键来集合数据,如不雅没有定义主键,InnoDB会选择一个独一的非空索引代替,如不雅没有独一的非空索引,InnoDB会隐式定义一个主键来作为集合索引。
集合索引可以很大年夜程度的进步拜访速度,因为集合索引将索引和行数据保存在了同一个B-Tree中,所以找到了索引也就响应的┞芬到了对应的行数据,但在应用集合索引的时刻需留意避免随机的集合索引(一般指主键值不持续,且分布范围不平均),如应用UUID来作为集合索引机能会很差,因为UUID值的不持续会导致增长很多的索引碎片和随机I/O,最终导致萌芽的机能急剧降低。
2)、非集合索引
与集合索引不合的长短集合索引并不决定命据在磁盘汕9依υ?理排序,且在B-Tree中包含索引但不包含行数据,行数据只是经由过程保存在B-Tree中的索引对应的指帐攀来指向行数据,如:膳绫擎在(user_name,city, age)上建立的索引就长短集合索引。
如不雅一个索引(如:组合索引)中包含所有要萌芽的字段的值,那么就称之为覆盖索引,如:

因为要萌芽的字段(user_name, city, age)都包含在组合索引的索引列中,所以就应用了覆盖索引萌芽,查看是否应用了覆盖索引可以经由过程履行筹划中的Extra中的值为Using index则证实应用了覆盖索引,覆盖索引可以极大年夜的进步拜访机能。
经由过程例子来具体分析
5.6 若何应用索引来排序
在排序操作中如不雅能应用到索引来排序,那么可以极大年夜的进步排序的速度,要应用索引来排序须要知足以下两点即可。
5.5 覆盖索引
1)、ORDER BY子句后的列次序要与组合索引的列次序一致,且所有排序列的排序偏向(正序/倒序)需一致
2)、所萌芽的字段值须要包含在索引列中,及知足覆盖索引
在user_test表上创建一个组合索引

可以应用到索引排序的案例


注:第4点比较特别一点,如不雅where萌芽前提为索引列的第一列,且为常量前提,那么也可以应用到索引
无法应用索引排序的案例
1)、sex不在索引列中

2)、排序列的偏向不一致

3)、所要萌芽的字段列sex没有包含在索引列中
4)、where萌芽前提后的user_name为范围萌芽,所以无法应用到索引的其他列

5)、多表连接萌芽时,只有当ORDER BY后的排序字段都是第一个表中的索引列(须要知足以上索引排序的两个规矩)时,方可应用索引排序。如:再创建一个用户的扩大表user_test_ext,并建立uid的索引。

走索引排序

5.2.1 前缀索引的选择性

本文重要讲了B+Tree树构造的索引规矩,不合索引的创建,以及若何精确的创建出高效的索引技能来尽可能的进步萌芽速度,当然了关于索引的应用技能不单单只有这些,关于索引的更多技能还需日常平凡赓续的积聚相干经验。
推荐阅读
第一章 安然隔离收集高等威逼进击简介维基解密于2017年6月22日解密了美国中心谍报局(CIA)穹顶7(Vault7)收集兵器库中的第十二批档案,分别是“蛮横袋鼠(Brutal Kangaroo)”和>>>详细阅读
本文标题:如何理解并正确使用MySql索引
地址:http://www.17bianji.com/lsqh/36175.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示