如果把MySQL的表比作一本书,那索引就像这本书的目录,可以帮助我们快速找到想查找的记录.避免出现顺序遍历的情况.
索引的用途:
避免进行遍历, 优化查询速度(会降低插入和删除速度).
索引的工作原理(底层数据结构, B+树):
B+树的特点:
- N叉树结构(树的高度降低, 查询加快);
- 每一层兄弟节点之间相互连通(类似于链表)(遍历起来更方便);
- 叶子节点上储存数据, 非叶子节点用来辅助查找, 不储存数据.
B+树的优势:
- 与哈希相比, 可以处理模糊查询的情况;
- 与二叉搜索树相比, 高度更低, 查询效率更高;
- 与B树相比, 非叶子节点不再存储数据,数据只存储在同一层的叶子节点上; 叶子之间增加链表, 获取所有节点不再需要中序遍历; 当定位min与max后, 中间叶子节点不需要中序回溯(相比于B树的最大优势).
创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建对应列的索引.
通过主键索引查询的效率要比通过其他列的索引查询效率更高.
因为主键索引中叶子节点上存的数据是一条条的记录, 而其他列上索引叶子节点上存的是对应主键的id.
通过其他列来查询的话,需要查两次(回表).
查看索引:
show index from [表名];
创建索引:
create index [索引名] on [表名];
注: 主键索引不可删除
删除索引:
drop index [索引名] on [表名];