A documentação do MySQL afirma que:
Quando você define uma PRIMARY KEY em sua tabela, o InnoDB a usa como o índice clusterizado.
Mas essa não é a única possibilidade, você pode agrupar um índice exclusivo:
Se você não definir uma PRIMARY KEY para sua tabela, o MySQL localiza o primeiro índice UNIQUE onde todas as colunas de chave são NOT NULL e o InnoDB o usa como o índice clusterizado.
Parece que se eu primeiro criar um índice exclusivo em uma tabela, ele será marcado como clusterizado; Posso então criar uma chave primária e ela não será agrupada:
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);
No entanto, quando inspeciono a tabela resultante, minhas esperanças são frustradas:
Key Type Uni Columns
PRIMARY BTREE (clustered) YES ID2
ID1 BTREE YES ID1
Outra pergunta aqui no DBA.SE implica que criar um índice como parte do CREATE TABLE
script, e não depois, como uma CREATE INDEX
declaração separada, pode fazer a diferença. No entanto, recebo o mesmo resultado.
Existe uma maneira de forçar o MySQL a agrupar em um índice exclusivo de minha escolha, que não seja a chave primária, ou essa "opção de fallback" se aplica apenas a tabelas sem chave primária?