索引介绍:

定义:索引就相当于是数据库的“目录”

它的核心作用就一个:帮数据库快速找到数据,避免全表扫描

有索引:就像书前面有目录,直接看目录就能快速定位到某一页

没有索引:就像一本没有目录的书,想找一个词需要全部翻看一遍

数据结构/存储结构:

InnoDB用的索引结构B+树

B+树可以理解为 “多叉树(很多个分叉)”

二叉树“最多两个分叉”

哈希是一本“翻不了页”的词典,它能让你瞬间找到“精确的那一个词”

优点:

  • 数据量大时,对于查询速度有明显的提升

缺点:

  • 会占用一定的存储空间;

  • 会影响写入速度(增、删、改)

注意:

索引不是越多越好:如果表经常增删改,索引建太多,写入会慢得明显

索引语法:

 # 创建普通索引
 create index 索引名称 on 表名(列名);
 ​
 # 创建唯一索引
 create unique index 索引名称 on 表名(列名);
 ​
 # 添加主键索引
 alter table 表名 add primary key (列名);
 ​
 # 复合索引
 create index 索引名称 on 表名(列名1,列名2);

查看及删除:

 # 查看表上所有已创建的索引信息
 show index from 表名;
 ​
 # 删除索引
 drop index 索引名称 on 表名;
 ​
 # 查看实际执行时用了哪个索引或某条查询是否会走索引
 -- 查所有列
 EXPLAIN SELECT * FROM 表名 WHERE 列名 = '条件';
 ​
 -- 查特定列
 EXPLAIN SELECT id, username FROM 表名 WHERE 列名 = '条件';

常见的6种检索类型:

排名

type

一句话记住

能不能用

1

const

主键/唯一索引查 1 条

✅ 完美

2

eq_ref

JOIN 时用了主键/唯一索引

✅ 很好

3

ref

普通索引查多条

✅ 良好

4

range

索引范围查询(><BETWEENIN

⚠️ 及格线

5

index

扫描了整个索引树

❌ 要优化

6

ALL

全表扫描(灾难)

❌ 必须优化