首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL的索引 B+Tree

MySQL的索引 B+Tree

1. 常见索引的数据结构

哈希(Hash)

示意图

效率高,但是因为Hash算法的特性,数据无序,不能进行范围搜索

二分搜索树(Binary Search Tree)

示意图

数据有序,能够按范围查找,但是容易造成部分数据倾斜,导致该部分数据查询较慢

平衡二分搜索树(Balanced Binary Search Tree, AVL Tree)

示意图

是二分搜索树的优化版,解决了数据倾斜的问题,但是需要维护树平衡的额外开销

B树(B Tree)

示意图

每个节点可以存多条数据,子节点数量也可以大于2,优化了树的深度

B+树(B+Tree)

示意图

叶子节点会额外存储指向相邻叶子节点的指针,优化B树范围查询效率,且更加稳定

2. MySQL中B+Tree的使用

MySQL采用B+Tree,其关键点如下:

非叶子节点存索引,控制树的深度

叶子节点存数据,以及指向相邻叶子节点的指针

数据存入硬盘,需控制每一份数据的大小,以适应硬盘分页

那么每一份数据应该存多大呢?

MySQL每一份数据是硬盘分页大小的倍数

系统从硬盘中进行读取操作,是按页读取的(例如1024k、2048k……)

如果MySQL每一份数据的大小比硬盘一页的量小,那么每次硬盘读取就可能会读取一些不需要的数据,影响性能

通过 SHOW GLOBAL STATUS LIKE 'Innodb_page_size';即可查看MySQL每份数据的大小

3. MySQL中两大主要引擎的索引

MyISAM(非聚集索引)

索引和数据分开存

主键索引(Primary Key): 直接根据索引找到值

辅助索引(Secondary Key): 直接根据索引找到值

InnoDB(聚集索引)

索引和数据存一起(必须有一个索引,没有会建一个默认的)

主键索引(Primary Key): 直接根据索引找到值

辅助索引(Secondary Key): 先用索引找到主键,再根据主键找到值

山东掌趣网络科技

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200102A0CV0900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券