聚集索引是什么?

发布于:2024-07-11 ⋅ 阅读:(21) ⋅ 点赞:(0)

聚集索引(Clustered Index)

聚集索引(Clustered Index)是一种特殊的索引类型,它决定了表中数据的物理存储顺序。与非聚集索引不同,聚集索引的叶子节点直接包含数据行,因此在查询时无需再进行回表操作。

特点
  1. 物理排序:数据行按照聚集索引的键值顺序存储。这意味着数据在磁盘上的物理存储顺序与索引的顺序是一致的。
  2. 唯一性:每张表只能有一个聚集索引,因为数据行只能按照一种顺序存储。
  3. 高效检索:由于数据行存储在聚集索引的叶子节点中,按照聚集索引键值查询数据非常高效,尤其是范围查询。
适用场景
  • 主键索引:大多数情况下,主键索引会被默认设置为聚集索引,因为主键需要唯一且经常用于检索操作。
  • 排序和范围查询:适用于需要频繁按某个字段排序或进行范围查询的表,如时间戳。
示例

假设有一个名为 employees 的表,包含 employee_id(主键),namehire_date 列。创建表和聚集索引的 SQL 语句如下:

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    name VARCHAR(100),
    hire_date DATE
);

在这个例子中,employee_id 是主键,MySQL 默认会为主键创建聚集索引。因此,employees 表中的数据会按照 employee_id 的顺序物理存储。

数据存储示例

假设有以下数据插入 employees 表:

INSERT INTO employees (employee_id, name, hire_date) VALUES
(3, 'Alice', '2021-01-15'),
(1, 'Bob', '2020-03-22'),
(2, 'Charlie', '2021-06-10');

在聚集索引中,数据的存储顺序会按照 employee_id 排列:

employee_id | name    | hire_date
------------|---------|-----------
1           | Bob     | 2020-03-22
2           | Charlie | 2021-06-10
3           | Alice   | 2021-01-15
优点和缺点

优点

  • 快速检索:对于基于聚集索引键的查询非常高效,特别是范围查询。
  • 减少 I/O 操作:数据行直接存储在索引中,无需回表操作。

缺点

  • 插入和更新成本高:在表中插入新数据或更新现有数据时,可能需要移动大量数据以保持物理顺序,导致性能下降。
  • 占用更多存储空间:聚集索引可能导致数据页分裂,从而增加存储空间需求。
聚集索引与非聚集索引的区别
  • 聚集索引:数据行直接存储在索引的叶子节点,表只能有一个聚集索引。
  • 非聚集索引:索引的叶子节点存储的是数据行的指针或主键,表可以有多个非聚集索引。

总结起来,聚集索引在提高查询性能方面非常有用,特别是对于排序和范围查询,但其插入和更新操作可能会带来性能开销。在设计数据库时,需要根据具体的应用场景合理使用聚集索引。