索引简介
索引作用:
相当于一本字典目录,提高程序的检索查询效率;表中每一个字段都可添加索引
主键自动添加索引:
能够通过主键查询的尽量通过主键查询,效率较高
索引和表相同,存储在硬盘文件中
索引和表相同,都是一个对象,表是存储在硬盘文件中的,那举索引也是表的一部分,索引也
存储在硬盘文件中;
MySQL数据库中表的检索方式有2种:
第一种:全表扫描(效率较低)
第二种:通过索引检索(提高查询效率)
什么情况下适合给表中字段添加索引
1) 该字段数据量庞大
2) 该字段很少的DML操作(由亍索引也需要维护,DML操作多的话,也影响检索效率)3) 该字段经常出现在where条件中
注:实际开发中会根据项目需求戒客户需求等综合因素来做调整
主键和具有unique约束的字段自动会添加索引,根据主键查询效率较高,尽量根据主键检索。
查看sql的执行计划:explain
索引的应用
创建索引
1)语法结构:
a) create index 索引名 on 表名(列名)
b) create unique index 索引名 on 表名(列名)
注:添加unique表示在该表中的该列添加一个唯一性约束
示例:create index dept_dname_index on dept(dname);
查看索引
1) 语法结构:
a) show index from 表名
示例:show index from dept;
删除索引
1) 语法结构:
a) drop index 索引名 on 表名;
示例:drop index dept_dname_index on dept;
底层原理
索引底层采用的数据结构
B+ Tree
索引的实现原理:
通过 B Tree缩小扫描范围,底层索引进行了排序,分区,索引会携带数据在表中的“物理地址”
最终通过索引检测到数据之后,获取到关联的物理地址,通过物理地址定位表中的数据,效率是最高的
索引的分类
单一索引:给单个字段添加索引
复合索引:给多个字段联合起来添加一个索引
主键索引:主键上会自动添加索引
唯一索引:有unique约束的字段上会自动添加索引
索引什么时候失效?
1. 模糊查询的时候,第一个通配符使用的是%,这个时候索引是失效的
select enme from emp where ename like '%A%';