
1、概述
索引是存储引擎用于快速查找记录的一种数据构造,经由过程合理的应用数据库索引可以大年夜大年夜进步体系的拜访机能,接下来重要介绍在MySql数据库中索引类型,以及若何创建出加倍合理且高效的索引技能。
注:这里重要针对的是InnoDB存储引擎的B+Tree索引数据构造
2、索引的长处
- 大年夜大年夜减轻了办事器须要扫描的数据量,大年夜而进步了数据的检索速度
- 赞助办事器避免排序和临时表
- 可以将随机I/O变为次序I/O

3、索引的创建
3.1 主键索引

3.2 独一索引

3.3 通俗索引

3.4 全文索引

3.5 组合索引

4、B+Tree的索引规矩
创建一个测试的用户表

创建一个组合索引: ALTER TABLE user_test ADD INDEX idx_user(user_name , city , age);
4.1 索引有效的萌芽
4.1.1 全值匹配
全值匹配指的是和索引中的所有列进行匹配,如:以膳绫擎创建的索引为例,在where前提后可同时萌芽(user_name,city,age)为前提的数据。
注:与where后萌芽前提的次序无关,这里是很多同窗轻易误会的一个处所

4.1.2 匹配最左前缀
匹配最左前缀是指优先匹配最左索引列,如:膳绫擎创建的索引可用于萌芽前提为:(user_name )、(user_name, city)、(user_name , city , age)
注:知足最左前缀萌芽前提的次序与索引列的次序无关,如:(city, user_name)、(age, city, user_name)
4.1.3 匹配列前缀
指匹配列值的开首部分,如:萌芽用户名以feinik开首的所有效户
4.1.4 匹配范围值

4.2 索引的限制
1)、where萌芽前提中不包含索引列中的最左索引列,则无法应用到索引萌芽,如:

或

或

2)、即使where的萌芽前提是最左索引列,也无法应用索引萌芽用户名以feinik结尾的用户
3)、如不雅where萌芽前提中有某个列典范围萌芽,则其右边的所有列都无法应用索引优化萌芽,如:

5、高效的索引策略
5.1 索引列

索引列不克不及是表达式的一部分,也不克不及作为函数的参数,不然无法应用索引萌芽。

- SELECT * FROM user_test WHERE user_name = concat(user_name, 'fei');
6、总结
5.2 前缀索引
有时刻须要索引很长的字符列,这会增长索引的存储空间以及降低索引的效力,一种策略是可以应用哈希索引,还有一种就是可以应用前缀索引,前缀索引是选择字符列的前n个字符作为索引,如许可以大年夜大年夜节约索引空间,大年夜而进步索引效力。
推荐阅读
第一章 安然隔离收集高等威逼进击简介维基解密于2017年6月22日解密了美国中心谍报局(CIA)穹顶7(Vault7)收集兵器库中的第十二批档案,分别是“蛮横袋鼠(Brutal Kangaroo)”和>>>详细阅读
本文标题:如何理解并正确使用MySql索引
地址:http://www.17bianji.com/lsqh/36175.html
1/2 1

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