使用主键创建多列索引

neu*_*ert 2 mysql sql explain

我的桌子:

CREATE TABLE test (
  id INT AUTO_INCREMENT,
  anotherID INT,
  PRIMARY KEY (id),
  INDEX testIndex (id, anotherID)
);
INSERT INTO test VALUES (1,1),(2,1),(3,1),(4,1);
Run Code Online (Sandbox Code Playgroud)

我的查询:

EXPLAIN SELECT *
FROM test
WHERE id = 1
  AND anotherID = 1;
Run Code Online (Sandbox Code Playgroud)

因为只使用了PRIMARY键.但是,testIndex不是.我的问题是......为什么?既然SELECT在id和anotherID中都引用了值,那么不应该使用testIndex吗?

SQL小提琴:

http://sqlfiddle.com/#!2/b833d9/1

Gol*_*rol 6

主键是唯一的,因此甚至不需要额外的检查.它没有比主键更独特.因此,在这种情况下使用其他索引没有额外的好处.