欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQl索引基础

程序员文章站 2024-03-16 22:08:52
...

基础的索引类型以及优缺点

平衡树基础

InnoDB引擎的平衡树采用B+Tree索引,先分析B-Tree和B+Tree的结构特点,以及为什么采用B+Tree结构。

  • B-Tree结构:
    MySQl索引基础
    图中的数字都是键值,Data表示对应键值的数据,每个节点都有自己的键值和对应的数据,但是有对应的范围,介于[m2,m][\frac{m}{2}, m]之间。键值采用搜索平衡树的方式排列,而且中序遍历一定是有序的。
  • B+Tree结构:
    MySQl索引基础
    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;