目录
十七、索引(index)
1)什么是索引
1.索引的作用
相当于一本字典,提高程序的检索/查询效率;
表中每一个字段都可以添加索引;
2.主键自动加索引
能通过主键查询的数据,尽量使用主键,效率较高;
3.索引和表相同,存储在硬盘文件中
索引和表相同,都是一个对象,表是存储在硬盘文件中的,索引也是表的一部分,索引页存储在硬盘文件中;
4.MySQL数据库中表的检索方式有2种:
第一种:全局扫描(效率较低)
第二种:索引检索(效率较高)
2)什么情况下适合给表中字段添加索引
1.该字段数据量庞大;
2.该字段很少操作DML语句(索引需要维护,DML操作多的话,影响检索效率);
3.该字段经常出现在where条件中;
注:实际开发中会根据项目需求或客户需求等综合因素来做调整
3)索引的应用
1.创建索引
a)语法结构
Create index 索引名 on 表名(列名);
示例:Create index t_user_name_index on t_user(name);
Create unique index 索引名 on 表名(列名);
示例:Create unique index t_user_name_index on t_user(name);
注:添加unique表示在该表中的该列添加一个唯一性约束;
2.查询索引
a)语法结构
Show index from 表名;
示例:Show index from t_user;
3.删除索引
a)语法结构
Drop index 索引名 on 表名;
示例:drop index t_user_name_index on t_user;
4)索引底层采用的数据结构是:B+tree
5)索引实现原理?
通过B tree缩小范围,底层索引进行排序,分区,索引会携带数据在表中的“物理地址”,
最终通过索引检索到数据之后,获取到关联的物理地址,通过物理地址定位表中的数据,效率是最高的。
示例:select ename from emp where ename='SMITH';
通过索引检索转换为:
select ename from emp where 物理地址='0x3';
6)索引分类
单一索引:给单个字段添加索引;
复合索引:给多个字段联合添加1个索引;
主键索引:主键会自动添加索引;
唯一索引:有unique约束的字段上会自动添加索引;
7)索引什么时候失效?
Select * from emp where ename like '%M%';
模糊查询,第一个是通配符使用的%,这个时候索引会失效;