ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL数据库—— 索引(Indexes)

2021-12-01 13:04:33  阅读:184  来源: 互联网

标签:ename sal Indexes 索引 添加 emp MySQL where


索引(Indexes)


前言

数据库索引是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。


数据库索引就是为了提高表的搜索效率而对某些字段中的值建立的目录。

一、什么是索引?有什么用?

  • 索引就相当于一本书的目录,通过目录可以快速的找到对应的资源。

  • 在数据库方面,查询一张表的时候有两种检索方式:

      	第一种方式:全表扫描
      	第二种方式:根据索引检索(效率很高)
    
  • 索引为什么可以提高检索效率呢?

      	其实最根本的原理是缩小了扫描的范围。
    

索引虽然可以提高检索效率,但是不能随意的添加索引,因为索引也是数据库当中的对象,也需要数据库不断的维护。是有维护成本的。

比如,表中的数据经常被修改这样就不适合添加索引,因为数据一旦修改,索引需要重新排序,进行维护。

  • 添加索引是给某一个字段,或者说某些字段添加索引。
select ename,sal from emp where ename = 'SMITH';
当ename字段上没有添加索引的时候,以上sql语句会进行全表扫描,扫描ename字段中所有的值。
当ename字段上添加索引的时候,以上sql语句会根据索引扫描,快速定位。

二、创建索引对象和删除索引对象

  • 创建索引对象:
create index 索引名称 on 表名(字段名);
  • 删除索引对象:
drop index 索引名称 on 表名;

三、什么时候考虑给字段添加索引

  • 数据量庞大。(根据客户的需求,根据线上的环境)
  • 该字段很少的DML操作。(因为字段进行修改操作,索引也需要维护)
  • 该字段经常出现在where子句中。(经常根据哪个字段查询)

注意:主键和具有unique约束的字段自动会添加索引。根据主键查询效率较高。尽量根据主键检索。

例:

查看sql语句的执行计划:explain 后面跟查询语(Mysql特有的)

explain select ename,sal from emp where sal = 5000;

在这里插入图片描述
给薪资sal字段添加索引:

create index emp_sal_index on emp(sal);

在这里插入图片描述
再查看查询语句的执行计划:

explain select ename,sal from emp where sal = 5000;

在这里插入图片描述
删除索引:

drop index emp_sal_index on emp;

在这里插入图片描述


四、索引的实现原理

在这里插入图片描述

  • 通过B Tree缩小扫描范围,底层索引进行了排序,分区,索引会携带数据在表中的“物理地址”,最终通过索引检索到数据之后,获取到关联的物理地址,通过物理地址定位表中的数据,效率是最高的。
select ename from emp where ename = 'SMITH';
通过索引转换为:
select ename from emp where 物理地址 = 0x3;

五、索引的分类

  • 单一索引:给单个字段添加索引
  • 复合索引: 给多个字段联合起来添加1个索引
  • 主键索引:主键上会自动添加索引
  • 唯一索引:有unique约束的字段上会自动添加索引

六、索引失效

select ename from emp where ename like '%A%';

模糊查询的时候,第一个通配符使用的是%,这个时候索引是失效的。

标签:ename,sal,Indexes,索引,添加,emp,MySQL,where
来源: https://blog.csdn.net/Sgxlebron/article/details/121652816

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有