MySQL索引失效问题

索引结构

不同引擎有不同的索引结构。

索引结构描述
B+Tree索引最常见的索引类型,大部分引擎都支持B+Tree索引
Hash索引底层数据结构是用哈希表实现的,只有精确匹配索引列的查询才有效,不支持范围查询
R+Tree(空间索引)空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少
Full-text(全文索引)是一种通过建立倒排索引,快速匹配文档的方式。类似于Lucene,Solr,ES

  • 二叉树

二叉树缺点:顺序插入时,会形成一个链表,查询性能大大降低。大数据量情况下,层级较深,检索速度慢。

红黑树:大数据量情况下,层级较深,检索速度慢。

解决层级深出现了B-Tree

  • B-Tree(多路平衡查找树)

以一颗最大度数(max-degree)为5(5阶)的b-tree为例(每个节点最多存储4个key,5个指针):

    B-Tree结构形成演示网站

    B-Tree Visualization

    • B+Tree结构 

     与B树不同,所有的节点数据,在底层的节点数据中都能找到,上面的节点只是起到索引的作用

    底层节点的数据会用指针形成一个链表

    所有的数据都挂载子节点上面

    • MySQL对B+树结构的优化

    增加了一个相邻的指针,提高区间访问速度

     B+Tree结构形成演示网站

    B+ Tree Visualization

    •  为什么InnoDB存储引擎选择使用B+Tree索引结构?
    1. 相对于二叉树,层级更少,搜索效率高;
    2. 对于B-Tree,无论是叶子节点还是非叶子节点,都会保存数据,这样导致一页中存储的键值减少,指针跟着减少,要同样保存大量数据,只能增加树的高度,导致性能降低。

    什么情况下会失效?

    为什么会失效?

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值