您需要显式地创建索引,还是在定义主键时隐式创建索引?MyISAM和InnoDB的答案一样吗?


当前回答

你不必显式地为主键创建索引…这是默认的。

其他回答

MyISAM和InnoDB的主键都隐式索引。可以通过对使用主键的查询使用EXPLAIN来验证这一点。

你不必显式地为主键创建索引…这是默认的。

主键总是被索引。对于MyISAM和InnoDB也是如此,对于所有支持索引的存储引擎也是如此。

主键总是自动索引且惟一。因此,注意不要创建冗余索引。

例如,如果您这样创建了一个表

CREATE TABLE mytable (foo INT NOT NULL PRIMARY KEY, bar INT NOT NULL, baz INT NOT NULL,
  UNIQUE(foo), INDEX(foo)) ENGINE=InnoDB;

因为您想要索引主键并对其强制唯一性约束,所以实际上最终会在foo上创建三个索引!

根据http://dev.mysql.com/doc/refman/5.0/en/constraint-primary-key.html的说法,这似乎是隐含的