76-mysql的聚集索引和非聚集索引区别
MySQL中的聚集索引和非聚集索引的主要区别在于它们的存储方式和使用方式。
聚集索引(Clustered Index):
-
聚集索引的叶子页包含了行的全部数据。
-
每个表只能有一个聚集索引,因为一个表中的数据只能按照一种方式存储。
-
当你查询的列在聚集索引中,那么MySQL不需要进行额外的查找就能直接获取数据。
非聚集索引(Non-Clustered Index):
-
非聚集索引的叶子页包含了行的主键值。
-
非聚集索引的叶子页同时包含了一个书签(bookmark),该书签指向聚集索引中的对应行。
-
当你查询的列不在非聚集索引中时,MySQL需要通过非聚集索引找到聚集索引中的数据。
实例代码:
CREATE TABLE People (
PersonID int NOT NULL,
FirstName varchar(30) NOT NULL,
LastName varchar(30) NOT NULL,
BirthDate datetime NOT NULL,
PRIMARY KEY (PersonID),
INDEX (LastName, FirstName, BirthDate)
);
在这个例子中,PRIMARY KEY (PersonID)
创建了聚集索引,而INDEX (LastName, FirstName, BirthDate)
创建了非聚集索引。如果查询中使用到PersonID
(聚集索引),那么可以直接从索引中获取数据。而如果查询中使用到LastName
、FirstName
或BirthDate
(非聚集索引列),则需要通过非聚集索引先找到聚集索引,再获取数据行。