MySQL - 聚集索引
MySQL 中的索引用于更快地从数据库中检索数据。我们(用户)无法看到索引,但它们在后台工作以加快搜索和查询速度。索引分为两种类型:聚集索引和非聚集索引。
聚集索引可以手动对表中的数据进行排序。当数据插入到具有聚集索引的列时,记录会自动按指定顺序排序。因此,每个表只能有一个聚集索引,因为它决定了数据的排序顺序。
MySQL 聚集索引
MySQL 数据库没有专门为聚集索引提供的功能。在表上定义主键 (PRIMARY KEY) 时,会自动创建聚集索引。当未定义主键时,第一个唯一非空键将被视为聚集索引。
如果表没有主键或唯一索引,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 | 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)