SQL中的索引

概述

  • 索引(index)作用:
    相当于一本字典目录,提高程序的检索/查询效率,表中每一个字段都可添加索引。
  • 主键自动添加索引:
    主键和具有unique约束的字段自动会添加索引。能够通过主键查询的尽量通过主键查询,效率较高。
  • 存储地址
    索引和表相同,都是一个对象,表是存储在硬盘文件中的,那么索引也是表的一部分,索引也存储在硬盘文件中。
  • MySQL数据库中表的检索方式有2种:
    第一种:全表扫描(效率较低)
    第二种:通过索引检索(提高查询效率)
  • 什么情况下适合给表中字段添加索引?
    1、该字段数据量庞大;
    2、该字段很少的DML操作;(由与索引也需要维护,DML操作多的话,也影响检索效率)(数据一旦修改,索引需要重新排序)
    3、该字段经常出现在where条件中。
  • 查看SQL语句的执行计划
EXPLAIN SELECT
	id,
	`name` 
FROM
	t_user 
WHERE
	`name` = 'lisi';

在这里插入图片描述

索引的应用

创建索引
  • 语法结构:
    a)create index 索引名 on 表名(列名)
    b)create unique index 索引名 on 表名(列名)
    注:添加unique表示在该表中的该列添加一个唯一性约束。
  • 示例:
create index dept_dname_index on t_user(name);

再查看解释:
在这里插入图片描述

查看索引
  • 语法结构:
    show index from 表名;
  • 示例:
show index from dept;

在这里插入图片描述

删除索引
  • 语法结构:
    drop index 索引名 on 表名;
  • 示例:
drop index dept_dname_index on t_user;

索引的实现原理

索引底层采用的数据结构是:B + Tree

  • 索引的实现原理?
    通过B + Tree缩小扫描范围,底层索引进行了排序、分区,索引会携带数据在表中的“物理地址",最终通过索引检索到数据之后,获取到关联的物理地址,通过物理地址定位表中的数据。效率是最高。
  • 示例:
    select ename from emp where ename ='SMITH';
    通过索引转换为:
    select ename from emp where 物理地址 = 0x3;
  • 索引的分类
    单一索引:给单个字段添加索引
    复合索引:给多个字段联合起来添加1个索引
    主键索引:主键上会自动添加索引
    唯一索引:有unique约束的字段上会自动添加索引
  • 索引什么时候失效?
    模糊查询的时候,第一个通配符使用的是%,这个时候索引是失效的。
原文地址:https://www.cnblogs.com/yu011/p/13356937.html