索引
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 2 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当中的索引列参加了运算,索引失效。
1 | select * from emp where sal + 1 = 1800 ; |
5、在where当中索引列使用了函数
1 | select * from emp where lower (ename) = 'smith' ; |
本文来自博客园,作者:腹白,转载请注明原文链接:https://www.cnblogs.com/wyh518/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?