1、索引的概述
索引相当于一本书的目录,通过目录可以快速找到对应的资源。
作用:提高检索效率,缩小扫面范围。
注意:索引虽然提高效率但是依旧不能随意添加,因为索引也是数据库中的对象,也是需要数据库不断的维护的,有维护成本,表中数据经常修改就不适合,因为一旦修改索引需要重新排序,进行维护。
2、怎么创建索引对象
语法格式:create index 索引名称 on 表名 (字段名)。
eg:create index emp_sal_index on emp(sal);
3、怎么删除索引对象
语法格式:drop index 索引名称 on 表名;
4、什么时候给字段添加索引
- 数据量庞大。(根据客户需求,根据线上的环境。)
- 该字段很少的DML操作。
- 该字段经常出现在where子句中。
5、sql语句的执行计划
主键和具有unique约束的字段自动添加索引,根据主键查询效率较高,尽量根据主键检索。
==explain+sql语句可以解释该语句。(执行计划)==可以通过此命令判断sql是否走了索引!
6、索引底层采用的数据结构是:b+tree
索引的实现原理
案例分析
7、索引分类
- 单一索引:给单个字段添加索引
- 复合索引:给多个字段联合起来添加一个索引
- 主键索引:主键上会自动添加索引
- 唯一索引:有unique约束的字段上会自动添加索引
8、索引什么时候失效 ?
1、模糊查询,这个时候索引失效,因为以%开始,无法使用索引!
select ename from emp where ename ='%a%' ;
2、使用or的时候会索引失效,因为如果or两端的字段存在一个字段不具备索引,具备索引的字段也会失效!
select ename from emp where ename ='zhangsan' or job = 'Java' ;
3、使用复合索引,没有使用左侧的列去查找,索引失效
creat index emp_job_sal_index on emp(job,sal) # 为job和sal两个字段添加复合索引 select * from emp where job = 'java' ; #会走索引,因为使用job列去查了 select * from emp where sal = 1800 ; #不会走索引,因为没有使用左侧的job列!
4、where当中的索引列参加了运算,索引失效。
select * from emp where sal + 1 = 1800 ;
5、在where当中索引列使用了函数
select * from emp where lower(ename) = 'smith' ;
文章评论