SQL中的索引
概述
- 索引(index)作用:
相当于一本字典目录,提高程序的检索/查询效率,表中每一个字段都可添加索引。 - 主键自动添加索引:
主键和具有unique约束的字段自动会添加索引。能够通过主键查询的尽量通过主键查询,效率较高。 - 存储地址
索引和表相同,都是一个对象,表是存储在硬盘文件中的,那么索引也是表的一部分,索引也存储在硬盘文件中。 - MySQL数据库中表的检索方式有2种:
第一种:全表扫描(效率较低)
第二种:通过索引检索(提高查询效率) - 什么情况下适合给表中字段添加索引?
1、该字段数据量庞大;
2、该字段很少的DML操作;(由与索引也需要维护,DML操作多的话,也影响检索效率)(数据一旦修改,索引需要重新排序)
3、该字段经常出现在where条件中。 - 查看SQL语句的执行计划
EXPLAIN SELECT
id,
`name`
FROM
t_user
WHERE
`name` = 'lisi';
索引的应用
创建索引
- 语法结构:
a)create index 索引名 on 表名(列名)
b)create unique index 索引名 on 表名(列名)
注:添加unique表示在该表中的该列添加一个唯一性约束。 - 示例:
create index dept_dname_index on t_user(name);
再查看解释:
查看索引
- 语法结构:
show index from 表名;
- 示例:
show index from dept;
删除索引
- 语法结构:
drop index 索引名 on 表名;
- 示例:
drop index dept_dname_index on t_user;
索引的实现原理
索引底层采用的数据结构是:B + Tree
- 索引的实现原理?
通过B + Tree缩小扫描范围,底层索引进行了排序、分区,索引会携带数据在表中的“物理地址",最终通过索引检索到数据之后,获取到关联的物理地址,通过物理地址定位表中的数据。效率是最高。 - 示例:
select ename from emp where ename ='SMITH';
通过索引转换为:
select ename from emp where 物理地址 = 0x3; - 索引的分类
单一索引:给单个字段添加索引
复合索引:给多个字段联合起来添加1个索引
主键索引:主键上会自动添加索引
唯一索引:有unique约束的字段上会自动添加索引 - 索引什么时候失效?
模糊查询的时候,第一个通配符使用的是%,这个时候索引是失效的。