MySQL 聚簇索引是什么?怎么创建和使用?

文章导读
上一个 下一个 MySQL 中的索引用于从数据库中更快地检索数据。我们(用户)无法看到索引,但它们在后台工作以加速搜索和查询。它们分为两种类型:clustered index(聚簇索引)和 non-clustered indexes(非聚簇索引)。
📋 目录
  1. MySQL 聚簇索引
A A

MySQL - 聚簇索引



上一个
下一个

MySQL 中的索引用于从数据库中更快地检索数据。我们(用户)无法看到索引,但它们在后台工作以加速搜索和查询。它们分为两种类型:clustered index(聚簇索引)和 non-clustered indexes(非聚簇索引)。

聚簇索引可以手动对表中的数据进行排序。当数据插入到带有聚簇索引的列中时,记录会自动按照指定的顺序排序。因此,每个表只能有一个聚簇索引,因为它决定了数据的排序顺序。

MySQL 聚簇索引

MySQL 数据库没有为 Clustered indexes(聚簇索引)提供单独的规定。当在表上定义 PRIMARY KEY 时,它们会自动创建。如果没有定义 PRIMARY KEY,则第一个 UNIQUE NOT NULL 键将被视为聚簇索引。

如果表没有 Primary Key 或 UNIQUE 索引,MySQL 将在内部创建一个隐藏的聚簇索引,名为 GEN_CLUST_INDEX,位于包含行 ID 值的列上。

表的行使用 InnoDB 生成的行 ID 值进行排序。

示例

让我们使用以下查询创建一个名为 CUSTOMERS 的表 −

CREATE TABLE CUSTOMERS(
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE  INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (20, 2),
   PRIMARY KEY(ID)
);

现在,我们将使用 INSERT 语句向上述创建的表中插入一些值 −

INSERT INTO CUSTOMERS VALUES 
(1, 'Ramesh', '32', 'Ahmedabad', 2000),
(2, 'Khilan', '25', 'Delhi', 1500),
(3, 'Kaushik', '23', 'Kota', 2500),
(4, 'Chaitali', '26', 'Mumbai', 6500),
(5, 'Hardik','27', 'Bhopal', 8500),
(6, 'Komal', '22', 'MP', 9000),
(7, 'Muffy', '24', 'Indore', 5500);

表将按以下方式创建 −

ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

使用以下查询,我们可以列出在 CUSTOMERS 表上创建的所有索引 −

SHOW INDEX FROM CUSTOMERS\G

输出

从下面的输出中可以看到,在 CUSTOMERS 表的 ID 列上创建了 PRIMARY KEY。

*************************** 1. row ***************************
        Table: customers
   Non_unique: 0
     Key_name: PRIMARY
 Seq_in_index: 1
  Column_name: ID
    Collation: A
  Cardinality: 7
     Sub_part: NULL
       Packed: NULL
         Null:
   Index_type: BTREE
      Comment:
Index_comment:
      Visible: YES
   Expression: NULL
1 row in set (0.01 sec)