疯狂编程网

  • 首页
  • 后端
    • GOLANG
    • PHP
  • 前端
  • 客户端
  • 服务器
  • AIGC
  • 开发工具
  • 代码人生
  • 关于本站
    • 联系我们
    • 免责声明
  1. 首页
  2. 服务器
  3. MYSQL
  4. 正文

索引

2023年5月10日 255点热度 0人点赞 0条评论

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/

标签: mysql
最后更新:2023年5月10日

大明

靠写代码养家的开发者。

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2023 疯狂编程网. ALL RIGHTS RESERVED.

京ICP备2022013580号-1