MySQL - 集群索引



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

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

MySQL 集群索引

MySQL 数据库没有为集群索引提供单独的规定。当在表上定义 PRIMARY KEY 时,它们会自动创建。当未定义 PRIMARY KEY 时,第一个 UNIQUE NOT NULL 键将被视为集群索引。

如果表没有主键或唯一索引,MySQL 将在包含行 ID 值的列上内部创建一个名为GEN_CLUST_INDEX的隐藏集群索引。

表的行使用 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 姓名 年龄 地址 工资
1 Ramesh 32 艾哈迈达巴德 2000.00
2 Khilan 25 德里 1500.00
3 Kaushik 23 科塔 2000.00
4 Chaitali 25 孟买 6500.00
5 Hardik 27 博帕尔 8500.00
6 Komal 22 海得拉巴 4500.00
7 Muffy 24 因多尔 10000.00

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

SHOW INDEX FROM CUSTOMERS\G

输出

如下面的输出所示,PRIMARY KEY 在 CUSTOMERS 表的 ID 列上创建。

*************************** 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)
广告