Mysql优化系列之索引(index)

2019-08-19  本文已影响0人  MrZhang2019

一、简介

二、索引的数据类型

上面介绍索引知道了索引就是数据结构,那么,我们都知道,数据结构有:hash表,二叉树,红黑树,B-Tree,B+树等
例如有如下表数据:

col1 col2
1 34
2 77
3 5
4 91
5 22
6 89
7 23

那么有一条sql查询语句:

select * from table where col2 = 89;
二叉树

那么使用二叉树查询如下(col2创建索引的情况下):


二叉树索引结构

根据二叉树的类型(右边节点的值大于父节点的值)可以推论,从根节点 34 开始,需要进行两次的磁盘I/O操作,就可以查询到二叉树的key和value,key存的是89这个值,value是“0x77”,也就是该条数据所对应的磁盘文件指针。然后再根据磁盘指针“0x77”,可以查找到该行 col1=6,col2=89所对应的数据结果。
如果说col2的值比较大,表数据又比较多,那可能就需要N次磁盘I/O操作才能查询到数据,效率比较低。
再比如:把col1增加索引,col1为自增列的情况下,

select * from table where col1 = 6;

那么二叉树的结果为:


col1为索引的二叉树

因为是自增列,所以右边节点的值会一直大于父节点,最终变成这样的单边增长树。那么在执行上面的sql查询语句,会经过6次磁盘I/0操作。

所以二叉树不适合mysql的索引数据结构。

红黑树

同样的,把col1增加索引,col1为自增列的情况下,

select * from table where col1 = 6;

那么红黑树的结果为:

红黑树
从图中可以看出来,需要三次操作就能找到 col1=6的节点。由于数据量比较少,所以查询比较快。如果有几十上百万的数据,那么就容易造成树的节点比较深,导致树的高度不可控,所以红黑树不适合mysql的索引数据结构。

B+树

在mysql中,索引用到的是 B+树,B+Tree的高度是可控的,mysql通常是3到5层。注意:B+Tree只在最末端叶子节点存数据,叶子节点是以双向链表的形势互相指向的。
使用B+树结构存储的优点:

B+树示例图
b+树性质

hash

在mysql中,创建索引,也可以使用hash表,


创建hash索引

mysql会对hash索引创建一个hash值对应的表,每一个索引字段对应一个hash值
如果在查询语句执行的时候,

select * from table where col2 = 49;

索引为hash索引,则mysql会对sql语句进行优化,mysql底层自己的hash算法,所以hash索引查询会非常快,速度会比BTree还快。

select * from table where col2 = hash(49);

hash特点:

三、索引的优缺点

上一篇 下一篇

猜你喜欢

热点阅读