含义:
是帮助sql加快查找数据的数据结构。类似于新华字典的目录,方便和加快我们找到想要的数据。
使用索引:
一般用可视化操作
-- 创建索引
create [ UNIQUE | FULLTEXT ] index 索引名 on 表名字 ( 列1,...列n ) ;
-- 查看索引
show index from 表名;
-- 删除索引
drop index 索引名 on 表名;
底层数据结构
所用数据结构 | 如何选择 |
B+Tree | 最常用的索引类型 |
Hash | 底层数据结构是哈希表,用于等值查询,效率比B+Tree要高 |
hash
BTree
B+Tree
- 非叶子节点仅仅是起到一个索引作用【查找】
- 所有的数据都会出现在叶子节点
- 叶子节点构成单向链表
索引的优缺点
优点:
- 任意字段都可以添加索引。
- 可以加快数据查找速度。
缺点:
- 创建和维护索引需要时间
- 对表中数据删除、修改、增加的同时也需要对索引进行维护
- 索引也需要空间存储
什么时候使用索引?
什么时候使用:
- 作为主键的列可以使用索引(自动创建,聚集索引)
- 经常进行连接的列可以使用索引,主要是外键。(自动创建,普通索引)可以加快连接速度。
- 在经常需要查找的列使用索引,加快查找速度
- 在经常需要排序的列(order by)使用索引,加快排序速度
什么时候不需要使用索引:
- 对非常数据少的表一般不建立索引
- 对于很少查询的列不建立
- 对于数据量很少或者数据量很多重复不需要建立索引
索引的分类
功能划分
物理分类
聚集索引和二级索引
- 聚集索引将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据
- mysql中每个表都有一个聚集索引(clustered index ),除此之外的表上的每个非聚集索引都是二级索引,又叫辅助索引(secondary indexes)。
-
以InnoDB来说,每个InnoDB表具有一个特殊的索引称为聚集索引。如果您的表上定义有主键,该主键索引是聚集索引。如果你不定义为您的表的主键时,MySQL取第一个唯一索引(unique)而且只含非空列(NOT NULL)作为聚集索引,InnoDB使用它作为聚集索引。如果没有这样的列,InnoDB就自己产生一个这样的ID值,它有六个字节,而且是隐藏的,使其作为聚簇索引。
-
案例
索引失效参考这篇文章(115条消息) mysql索引失效的常见9种原因详解_book多得的博客-优快云博客_mysql索引失效的几种情况