索引

打印 上一主题 下一主题

主题 556|帖子 556|积分 1668

1、索引的概述
索引相当于一本书的目录,通过目录可以快速找到对应的资源。
作用:提高检索效率,缩小扫面范围。
注意:索引虽然提高效率但是依旧不能随意添加,因为索引也是数据库中的对象,也是需要数据库不断的维护的,有维护成本,表中数据经常修改就不适合,因为一旦修改索引需要重新排序,进行维护。
2、怎么创建索引对象
语法格式:create index 索引名称 on 表名 (字段名)。
  1. 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、模糊查询,这个时候索引失效,因为以%开始,无法使用索引!
  1. select ename from emp where ename ='%a%' ;
复制代码
2、使用or的时候会索引失效,因为如果or两端的字段存在一个字段不具备索引,具备索引的字段也会失效!
  1. select ename from emp where ename ='zhangsan' or job = 'Java' ;
复制代码
3、使用复合索引,没有使用左侧的列去查找,索引失效
  1. creat index emp_job_sal_index on emp(job,sal) # 为job和sal两个字段添加复合索引
  2. select * from emp where job = 'java' ; #会走索引,因为使用job列去查了
  3. select * from emp where sal = 1800 ; #不会走索引,因为没有使用左侧的job列!
复制代码
4、where当中的索引列参加了运算,索引失效。
  1. select * from emp where sal + 1 = 1800 ;
复制代码
5、在where当中索引列使用了函数
  1. select * from emp where lower(ename) = 'smith'  ;
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我可以不吃啊

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表