百木园-与人分享,
就是让自己快乐。

索引

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\'  ;

本文来自博客园,作者:腹白,转载请注明原文链接:https://www.cnblogs.com/wyh518/


来源:https://www.cnblogs.com/wyh518/p/16830927.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » 索引

相关推荐

  • 暂无文章