程序员社区

MySQL系列教程 --- 44、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 允许一张表存储一个或多个非聚集索引。非聚集索引提高了使用键而不分配主键的查询的性能。

例子

//It will create non-clustered index  
CREATE NonClustered INDEX index_name ON table_name (column_name ASC);  

特征

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

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

聚集索引与非聚集索引

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

范围 聚集索引 非聚集索引
定义 聚集索引是存储行数据的表。在关系数据库中,如果表列包含主键,MySQL 会自动创建一个名为PRIMARY的聚集索引。 PRIMARY 索引以外的索引(聚集索引)称为非聚集索引。非聚集索引也称为二级索引。
用来 它可用于对记录进行排序并将索引存储在物理内存中。 它创建数据行的逻辑顺序并使用指针来访问物理数据文件。
尺寸 它的尺寸很大。 与聚集索引相比,它的大小很小。
数据访问 它访问数据非常快。 与聚集索引相比,它具有较慢的访问能力。
储存方法 它将记录存储在索引的叶节点中。 它不会在索引的叶节点中存储记录,这意味着它需要额外的数据空间。
额外磁盘空间 它不需要额外的报告。 它需要额外的空间来单独存储索引。
钥匙类型 它使用主键作为聚集索引。 它可以使用充当复合键的唯一约束。
包含在表中 一张表只能有一个聚集索引。 一个表可以包含一个或多个非聚集索引。
索引 ID 聚集索引始终包含索引 id 为 0。 非聚集索引始终包含索引 id>0。
赞(0) 打赏
未经允许不得转载:IDEA激活码 » MySQL系列教程 --- 44、MySQL 聚集索引和非聚集索引的区别

一个分享Java & Python知识的社区