MySQL 文档指出:
当您在表上定义 PRIMARY KEY 时,InnoDB 将其用作聚集索引。
但这不是唯一的可能性,您可以改为使用唯一索引进行聚类:
如果你没有为你的表定义 PRIMARY KEY,MySQL 会定位第一个唯一索引,其中所有键列都不是 NULL,InnoDB 将它用作聚集索引。
似乎可以这样说,如果我首先在表上创建唯一索引,它将被标记为聚集;然后我可以创建一个主键,它将是非聚集的:
CREATE TABLE Tmp_CUQTest
(
ID1 INT NOT NULL, -- Desired clustering field
ID2 INT NOT NULL -- Desired PK field
);
CREATE UNIQUE INDEX CUC_Tmp ON Tmp_CUQTest (ID1);
ALTER TABLE Tmp_CUQTest ADD CONSTRAINT PRIMARY KEY PK_Tmp (ID2);
但是,当我检查结果表时,我的希望破灭了:
Key Type Uni Columns
PRIMARY BTREE (clustered) YES ID2
ID1 BTREE YES ID1
DBA.SE 上的另一个问题意味着创建索引作为CREATE TABLE
脚本的一部分,而不是之后,作为单独的CREATE INDEX
语句,可能会有所作为。但是,我得到相同的结果。
有没有办法强制 MySQL 在我选择的唯一索引上进行集群,而不是主键,或者这个“后备选项”是否只适用于没有主键的表?