外观
MySQL 的数据结构是什么
MySQL
的数据结构可分为逻辑数据结构和物理存储数据结构,具体如下:
逻辑数据结构
- 数据库(
Database
):是最高层次的存储结构,可包含多个表、视图、存储过程、触发器等数据库对象,用于逻辑上组织和管理相关的数据表和其他对象,一个数据库对应一个独立的命名空间。 - 表(
Table
):是MySQL
中基本的数据结构,由行和列组成,用于存储具体数据,每个表都有一个唯一的表名,且每列都有对应的数据类型,用来组织相关数据。 - 行(
Row
):是表中的一条数据记录,包含表中所有列对应的一个值,通常有一个唯一标识符,即主键,用于唯一地标识这条记录。 - 列(
Column
):是表结构中的一个元素,每列都有一个名称、数据类型和约束,定义了数据的类型、约束等信息,用于表示数据字段。 - 索引(
Index
):是一种数据结构,用于快速搜索表中的数据,通过将列的值与指向行位置的指针关联起来工作,可提高查询性能。 - 视图(
View
):是基于一个或多个现有表中的数据创建的虚拟表,提供了一种从不同角度查看数据的方法,而无需修改原始表,可简化复杂的查询操作,并提供更加直观和易于理解的数据展示方式。 - 约束(
Constraint
):用于强制对数据进行规则,以确保数据的完整性和一致性,常见的约束包括主键、外键、唯一索引和非空约束。
物理存储数据结构
- B + 树:是
MySQL
最常用的索引数据结构,主要用于InnoDB
和MyISAM
存储引擎中的主键索引和辅助索引。每个节点可以有多个子节点,适合大规模数据的快速查询。叶子节点形成链表,支持范围查询的高效性。 - 哈希表(
Hash Table
):主要用于内存中的哈希索引,MySQL
中的Memory
(Heap
)引擎经常使用哈希表作为其索引结构,也可用于优化内部的一些快速查找操作。哈希表通过哈希函数将键映射到固定大小的存储桶中,实现快速的O (1)
时间复杂度查找,适合精确匹配查询,但不适合范围查询。 - 双向链表:在
MySQL
中,双向链表被用于管理缓存中的数据页和索引页面。双向链表允许从头和尾进行遍历,支持O (1)
的插入和删除操作。 - 位图(
Bitmap
):常用于位字段的管理,以及一些存储引擎的内部操作优化,某些场景下,位图索引可以加速范围查询和布尔运算。位图通过一系列位(0
或1
)来标记数据的存在与否,节省空间且能快速执行布尔运算,适合低基数(重复值较多)数据列的优化查询。