MySQL / 索引模型

一、索引的作用

提高数据查询效率。

二、常见索引模型

哈希表、有序数组、搜索树。

三、哈希表

思路:把值放在数组里,用一个哈希函数把 key 换算成一个确定的位置,然后把 value 放在数组的这个位置。

哈希冲突的处理办法:链表、红黑树。

哈希表适用场景:只有等值查询的场景。

四、有序数组

思路:按顺序存储。查询用二分法就可以快速查询,时间复杂度是:O(log(N))。

有序数组查询效率高,更新效率低

有序数组的适用场景:静态存储引擎。

五、二叉搜索树

每个节点的左儿子小于父节点,父节点又小于右儿子。

查询时间复杂度O(log(N)),更新时间复杂度O(log(N))

六、MySQL索引模型

数据库存储大多不适用二叉树,因为树高过高,会适用 N 叉树。

InnoDB 中的索引模型:B+Tree 。

七、索引类型

主键索引(聚簇索引)的叶子节点存的是用于保存数据的页,非主键索引(二级索引)的叶子节点内容是主键的值。

主键索引和普通索引的区别:主键索引只要搜索 ID 这个 B+Tree 即可拿到数据。普通索引先搜索索引拿到主键值,再到主键索引树搜索一次(回表)

一个数据页满了,按照B+Tree算法,新增加一个数据页,叫做页分裂,会导致性能下降。空间利用率降低大概50%。当相邻的两个数据页利用率很低的时候会做数据页合并,合并的过程是分裂过程的逆过程。

从性能和存储空间方面考量,自增主键往往是更合理的选择。

 

(SAW:Game Over!)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值