MySQl索引基础
程序员文章站
2024-03-16 22:08:52
...
基础的索引类型以及优缺点
平衡树基础
InnoDB引擎的平衡树采用B+Tree索引,先分析B-Tree和B+Tree的结构特点,以及为什么采用B+Tree结构。
- B-Tree结构:
图中的数字都是键值,Data表示对应键值的数据,每个节点都有自己的键值和对应的数据,但是有对应的范围,介于之间。键值采用搜索平衡树的方式排列,而且中序遍历一定是有序的。 - B+Tree结构:
B+Tree的结构中,父节点的所有孩子节点中,一定存放了父节点的所有索引值。叶子节点一定存放了所有的键值的范围,而且叶子节点的键值跟随对应的数值。每个叶子节点都有指向下一个叶子节点的指针,底层的叶子节点形成了一个有序链表。
B-/+Tree作为索引,优势在于:树的高度低,一次读取多个节点,减少磁盘的IO次数;缺点是平衡树结构复杂,需要调整结构耗费时间,但是这相对磁盘IO时间可以忽略。
B+Tree比B-Tree的优势:
- B+Tree的非叶子节点没有数据,因此可以使得叶子节点包含更多的键值,减低树的高度,优化查询次数
- B+Tree获取一定范围数据时,B+Tree不需要回溯等的操作,而是直接根据索引定位到叶子节点的数据范围的两端,然后利用叶子的链式结构读取
- 插入或删除数据时,需要调整的仅仅时索引排列方式,底层的数据部分不变
缺点在于B+Tree使用了多余的节点,因为所有的孩子节点都要保存父节点的数据。
推荐文章:https://blog.csdn.net/qq_26222859/article/details/80631121
InnoDB的B+Tree索引
索引的代价是,更新、插入和删除的时候,需要调整平衡树的结构;维护平衡树本身也需要代价。
B+Tree索引可以创建在多行上,匹配时可以从最左侧匹配或者全职匹配,但是无法跳过中间的列,或者跳过第一列去匹配后面的数据。如果某个列有优化查询范围,则后面的列无法使用索引优化。
B+Tree索引中,索引列的顺序是非常重要的,索引列的顺序不对,会影响效率
哈希索引
哈希索引基于哈希表实现,只有精确比配索引的所有列才有效,哈希索引不支持范围查询,仅支持等值,比如=、!=和IN()
等。同时,要合理选择哈希函数,否则会在哈希计算上浪费过多时间。出现哈希冲突时,可以再利用精确匹配的方式。
索引的一些总结
使用索引有3个主要的优势:
- 减少磁盘IO的次数
- 减少了排序和临时表
- 把随机IO变成了顺序IO
索引所在的列不能在表达式中,否则无法使用索引的特性。
索引的基本操作
创建索引:
ALTER TABLE table_name ADD INDEX index_name (column_list) # 普通索引
ALTER TABLE table_name ADD UNIQUE (column_list) # 唯一索引
ALTER TABLE table_name ADD PRIMARY KEY (column_list) # 主键索引
# create的方式
CREATE INDEX index_name ON table_name (column_list)
CREATE UNIQUE INDEX index_name ON table_name (column_list)
删除索引
DROP INDEX index_name ON talbe_name
ALTER TABLE table_name DROP INDEX index_name
ALTER TABLE table_name DROP PRIMARY KEY
查看索引
show index from tblname;
上一篇: 简单排序 插入排序 C语言入门