MySQL 聚集索引和非聚集索引

聚集索引和非聚集索引的区别是数据库相关讨论中最著名的问题。两个索引具有相同的物理结构,并在 MySQL 服务器数据库中存储为 BTREE 结构。在本节中,我们将解释它们之间最流行的区别。

MySQL中的索引是一个帮助我们从表中快速返回请求数据的过程。如果表没有索引,它会扫描整个表以查找请求的数据。MySQL允许两种不同类型的索引:

  1. 聚集索引
  2. 非聚集索引

一、什么是聚集索引?

聚集索引是存储行数据的表。它根据只能在一个方向上排序的键值定义表数据的顺序。在数据库中,每张表只能包含一个聚集索引。在关系数据库中,如果表列包含主键或唯一键,MySQL 允许您基于该特定列创建名为PRIMARY的聚集索引。

聚集索引的示例

以下示例说明了如何在 MySQL 中创建聚集索引:

CREATE TABLE Student  
( post_id INT NOT NULL AUTO_INCREMENT, user_id INT NOT NULL,  
 CONSTRAINT Post_PK  
    PRIMARY KEY (user_id, post_id),    //clustered index  
 CONSTRAINT post_id_UQ  
    UNIQUE (post_id)               
) ENGINE = InnoDB ;  

聚集索引的特征

以下是聚集索引的基本特征:

  • 它使我们能够将数据和索引存储在一起。
  • 它基于键值仅以一种方式存储数据。
  • 键查找。
  • 它支持索引扫描和索引查找数据操作。
  • 聚集索引总是使用一列或多列来创建索引。

二、什么是非聚集索引? 

PRIMARY 索引(聚集索引)以外的索引称为非聚集索引。非聚集索引也称为二级索引。非聚集索引和表数据都存储在不同的地方。它无法对表数据进行排序(排序)。非聚集索引就像一本书,内容写在一个地方,索引在不同的地方。MySQL 允许一张表存储一个或多个非聚集索引。非聚集索引提高了使用键而不分配主键的查询的性能。

非聚集索引的示例

CREATE NonClustered INDEX index_name ON table_name (column_name ASC);  

非聚集索引的特征

以下是非聚集索引的基本特征:

  • 它只存储键值。
  • 它允许访问具有指向物理行的指针的辅助数据。
  • 它有助于索引扫描和查找的操作。
  • 一个表可以包含一个或多个非聚集索引。
  • 非聚集索引行存储非聚集键和行定位器的值。

三、聚集索引 VS 非聚集索引 

让我们通过表格形式来看看聚集索引和非聚集索引之间的一些差异:

比较维度 聚集索引 非聚集索引
概念 聚集索引是存储行数据的表。在关系数据库中,如果表列包含主键,MySQL 会自动创建一个名为PRIMARY的聚集索引。 PRIMARY 索引(聚集索引)以外的索引称为非聚集索引。非聚集索引也称为二级索引。
应用 它可用于对记录进行排序并将索引存储在物理内存中。 它创建数据行的逻辑顺序并使用指针来访问物理数据文件。
存储大小 它的尺寸很大。 与聚集索引相比,它的大小很小。
数据访问效率 它访问数据非常快。 与聚集索引相比,它的访问能力较慢。
储存方法 它将记录存储在索引的叶节点中。 它不在索引的叶节点中存储记录,这意味着它需要额外的数据空间。
额外的磁盘空间 它不需要额外的报告。 它需要额外的空间来单独存储索引。
key类型 它使用主键作为聚集索引。 它可以使用充当复合键的唯一约束。
表的包含方式 一张表只能有一个聚集索引。 一个表可以包含一个或多个非聚集索引。
索引 ID 聚集索引始终包含 0 的索引 ID。 非聚集索引始终包含索引 id>0。

热门文章

优秀文章