当前位置: 首页 > news >正文

MySQL索引底层数据结构与算法

1、索引的数据结构

1.1、二叉树

1.2、红黑树(二叉平衡树)

1.3、hash表

对key进行一次hash计算就可以定位出数据存储的位置

问题:hash冲突问题、仅满足=和in的查找,不支持范围查找  

1.4、B-tree

1.5、B+ tree

非叶子节点不存储data,只存储索引(冗余),可以放更多的索引

叶子结点用指针连接,提高区间访问的性能

inodb-page-size=16kb 

2、MyISM存储引擎索引实现

索引文件和数据文件是分离的(非聚集)

3、InnoDB索引实现(聚集)

3.1、表数据文件本身就是按B+Tree组织的一个索引结构文件

3.2、聚集索引-叶节点包含了完整的数据记录

3.3、为什么建议InnoDB表必须建主键,并且推荐使用整型的自增主键?

答:B+树的存储结构决定的,如果没有,架构会自动创建一个隐藏的主键;整形在比较大小时速度快,数据结构保存比较节省空间;存储时不需要向叶子中间插入数据,重新平衡树,节省时间。

3.4、为什么非主键索引结构叶子节点存储的是主键值?(一致性和节省存储空间)

4、索引最左前缀原理

4.1、复合索引的结构
复合索引是由多个列组成的索引,例如一个索引定义为 (col1, col2, col3)。在索引结构中,数据会按照 col1 排序,如果 col1 相同,则按照 col2 排序,以此类推。

4.2、查询条件的匹配规则

  • 如果查询条件中包含 col1,例如 WHERE col1 = 'A',则索引可以被使用。
  • 如果查询条件中包含 col1 和 col2,例如 WHERE col1 = 'A' AND col2 = 'B',则索引也可以被使用。
  • 如果查询条件中包含 col1col2 和 col3,例如 WHERE col1 = 'A' AND col2 = 'B' AND col3 = 'C',则索引可以被完全利用。
  • 如果查询条件中跳过 col1,例如 WHERE col2 = 'B',则索引无法被使用,因为查询条件没有从最左列开始。
  • 如果查询条件中跳过 col2,例如 WHERE col1 = 'A' AND col3 = 'C',则索引只能部分使用,即只能利用 col1 的部分,而 col3 无法被索引优化。

相关文章:

  • 如何配置activemq,支持使用wss协议连接。
  • 如何避免和恢复因终端关闭导致的 LoRA 微调中断
  • 无锡哲讯科技:引领芯片封装SAP系统的智能化革命
  • 前端性能优化3:深入分析 Web Worker 和 Service Worker
  • Gmsh+OCC对应版本库编译
  • LabVIEW 程序运行时内存不足报错原因
  • 故障诊断模型评估——混淆矩阵,如何使样本量一致(上)
  • 【计算机组成原理】第二部分 存储器--分类、层次结构
  • Linux的域名解析服务器
  • 专题四:综合练习( 找出所有子集的异或总和再求和)
  • 每日Prompt:发光线条解剖图
  • 华秋2025电子设计与制造技术研讨会(华东站)成功举办!
  • 技术干货 | 如何用模块化仪器高效测试嵌入式微控制器?
  • 嵌入式培训之数据结构学习(二)顺序表与单向链表
  • 手机换IP真的有用吗?可以干什么?
  • 解锁向量数据库:实现高效过滤与管理的实用方法
  • OpenCV的CUDA模块进行图像处理
  • FPGA:XILINX FPGA产品线以及器件选型建议
  • 首个窗口级无人机配送VLN系统!中科院LogisticsVLN:基于MLLM实现精准投递
  • 使用PHP对接日本股票市场数据
  • 如何做网站排名第一/南宁网络推广品牌
  • 深圳龙岗疫情最新消息多少例了/seo营销专员
  • 专业制作网站有哪些/百度知道官网
  • 建设一个小网站需要多少钱/个人网站开发网
  • 免费网站建设协议/友情链接平台网站
  • seo怎么给网站做外链/微信朋友圈广告如何投放