MySQL中90%的慢Sql都可以通过索引来得到优化,为什么索引可以使Sql变的更快,我们需要先了解下MySQL InnoDB都有哪些索引。
按规则分类:Hash索引Memory引擎默认USING HASH
BTREE索引InnoDB引擎默认B+TreeUSING BTREE
按类型分类:主键也叫聚集索引,不允许有Null值
唯一索引同主键,但允许有Null值
二级索引辅助索引
全文索引MySQL5.6以后才支持,且只能是char、varchar,text字符类型才可以创建全文索引
复合索引多列联合的索引,可以是主键,也可以是辅助索引
数据结构:
不管哪种索引,都是一种数据结构。哈希表字段值通过Hash算法得出的Hash码,Hash索引中存储的即Hash码
二叉树每个节点包含左右指针、键值、存储地址,左子树的键值小于根的键值,右子树的键值大于根的键值
平衡二叉树每个节点包含左右指针、键值、存储地址,左子树的键值小于根的键值,右子树的键值大于根的键值,两个子树的高度最大差为1
BTree非叶子节点也存储数据,无双向链指针
B+Tree只有叶子节点存储数据,有双向链指针
哈希表:
哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,同时在哈希表中保存指向每个数据行的指针。检索时不需要类似B+Tree那样从根节点到叶子节点逐级查找,只需一次哈希算法即可定位到相应的位置,速度非常快。但优势只适用于键值唯一的等值查询。
二叉树与平衡二叉树: