MySQL 集群索引和非集群索引的区别

MySQL 集群索引和非集群索引的区别

集群索引和非集群索引的区别是数据库相关面试中最有名的问题。这两种索引具有相同的物理结构,并以BTREE结构存储在MySQL服务器数据库中。在本节中,我们将解释它们之间最常见的差异。

在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 ;

特点

下面是聚簇索引的主要特点:

  • 它允许我们将数据和索引一起存储。
  • 它根据键值以一种方式存储数据。
  • 键查找。
  • 它支持索引扫描和索引查找数据操作。
  • 聚簇索引总是使用一个或多个列来创建索引。

什么是非聚簇索引?

非聚簇索引是指除主索引(聚簇索引)之外的索引。非聚簇索引也称为二级索引。非聚簇索引和表数据存储在不同的位置。它无法对表数据进行排序。非聚簇索引的工作方式类似于一本书,内容写在一个地方,索引写在另一个地方。MySQL允许表存储一个或多个非聚簇索引。非聚簇索引改善了在没有分配主键的情况下使用键的查询性能。

示例

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

特性

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

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

聚集索引与非聚集索引对比

让我们通过表格形式看一些聚集索引和非聚集索引之间的主要区别:

参数 聚集索引 非聚集索引
定义 聚集索引是一种存储行数据的表。在关系数据库中,如果表的列包含主键,MySQL会自动创建一个名为 PRIMARY 的聚集索引。 非聚集索引是指除主索引(聚集索引)以外的索引。非聚集索引也被称为二级索引。
用途 可用于对记录进行排序并将索引存储在物理内存中。 它创建了数据行的逻辑顺序,并使用指针来访问物理数据文件。
大小 聚集索引的大小较大。 非聚集索引的大小较聚集索引小。
数据访问 它能够非常快速地访问数据。 相对于聚集索引,非聚集索引的访问速度较慢。
存储方式 它将记录存储在索引的叶节点中。 它不会将记录存储在索引的叶节点中,这意味着它需要额外的空间来存储数据。
额外磁盘空间 它不需要额外的磁盘空间。 它需要额外的空间来单独存储索引。
键的类型 它使用主键作为聚集索引。 它可以使用作为复合键的唯一约束工作。
包含于表中 一张表只能有一个聚集索引。 一张表可以包含一个或多个非聚集索引。
索引ID 聚集索引始终包含索引ID 0。 非聚集索引始终包含索引ID大于0。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程