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)