博客
关于我
由浅入深理解InnoDB的索引实现(1)
阅读量:85 次
发布时间:2019-02-25

本文共 1080 字,大约阅读时间需要 3 分钟。

00. 数据库性能优化之路——从索引到B+树

背景知识

在数据库性能优化中,B-树与B+树是核心数据结构,它们为数据库的查询、插入、更新和删除操作提供了高效的存储和定位机制。折半查找(Binary Search)作为B-树/B+树的查找算法,能够在对数时间内定位目标数据。

此外,数据库性能的关键因素包括磁盘IO效率和数据存储结构。传统的磁盘存储采用块/Page划分方式,数据通过链表连接,而行数据则以固定大小存放于磁盘中。


01. 数据基本操作的实现

数据库的核心操作包括INSERT、UPDATE、DELETE和SELECT。这些操作的高效性直接依赖于数据定位和读写的效率。定位操作通常通过索引(Index)实现,而索引的设计至关重要。


02. 索引的产生

索引的设计旨在减少磁盘IO的开销。通过将键值独立存储,并为每个键值建立指针,定位操作无需遍历所有数据块。这种方法以1/10的额外存储空间换取了定位效率的提升,定位操作的时间复杂度降低至O(1)。


03. 索引的进化——从Dense Index到Sparse Index

Dense Index包含所有数据的键值,但其定位效率较低。Sparse Index仅存储必要的键值,通过折半块查找显著减少磁盘IO。进一步优化中,Sparse Index被改进为多层结构,以提升定位效率。


04. 聚簇索引与辅助索引

聚簇索引(Clustered Index)将数据按主键排序,数据存储与索引一致,适合主键查询。辅助索引(Secondary Index)用于非主键查询,通过Dense Index层实现快速定位。一个表最多可有一个聚簇索引,但可以拥有多个辅助索引。


05. 范围搜索——高效的多键查询

基于有序键值的范围搜索,通过索引块和数据块的双向链表实现高效定位。这种方法适用于需要查询特定范围数据的场景。


06. B+树——高效的索引树结构

B+树通过多层索引结构(如Sparse Index和Dense Index),将磁盘IO的次数降至最低。其高效的查找算法和存储结构,使得B+树成为数据库索引的核心技术。


07. 索引操作与B+树实现

索引的插入、删除和维护涉及分裂和合并节点操作,这些过程需遵循B+树的性质。理解B+树的实现细节对数据库性能优化至关重要。


书籍推荐

  • 《Database Systems: The Complete Book》
  • 《Transaction Processing: Concepts and Techniques》

关注公众号 MySQL代码研究,获取更多技术深度内容!

转载地址:http://bqh.baihongyu.com/

你可能感兴趣的文章
Pympress:强大的双屏PDF阅读器
查看>>
pymysql.err.InternalError: (1054, "Unknown column '27D24A3B' in 'where clause'")之错误解决
查看>>
pymysql.err.OperationalError: (1364, “Field ‘id‘ doesn‘t have a default value“)
查看>>
Pytorch Tensor 维度操作的形象理解 Tensor.unsqueeze() Tensor.squeeze()
查看>>
PyMySQL库对Mysql数据库进行增删改查与工具类封装
查看>>
pynput的基本介绍和使用
查看>>
pyodbc 通过 IIS7 连接到 MSSQL 2005 服务器
查看>>
PyPI 存储库中的 JarkaStealer:深入解析与防范措施
查看>>
Pyplot tutorial,Pyplot官方教程自翻译
查看>>
PyQ5学习笔记——使用内部槽函数关闭窗口
查看>>
PyQ5学习笔记——使用自定义槽函数关闭窗口
查看>>
PyQt MimeData 文件名
查看>>
PyQt QML Material Design 按钮背景不会改变
查看>>
PyQt QString转成python stirng
查看>>
PyQt QToolButton在焦点时不更新图标
查看>>
PyQt 正确使用 emit() 和 pyqtSignal()
查看>>
PyQT-将文件复制到剪贴板
查看>>
PYQT.如何在QTableView中插入小部件
查看>>
PyQt4 代码在 PyQt5 (QHeaderView) 上不起作用
查看>>
PyQt4 到 PyQt5 ->mainFrame() 已弃用,需要修复才能加载网页
查看>>