我认为这是一个表现问题。
创建复合键时订单是否重要?
在我的实例中,复合键是使用名为hash的128位字符和名为user_id的外键(int)创建的。
例如,(hash
,user_id
)会比(user_id
,hash
)更快吗?
复合键是否会变慢,例如,如果它在连接中使用?
CREATE INDEX composite_hash_user_id_index ON `user_false_positives` (`hash`, `user_id`);
答案 0 :(得分:2)
复合键的顺序很重要。 MySQL使用最左边的索引,因此它取决于您要运行的查询。你可以做一个覆盖索引。在(a,b)上创建索引,然后在b上创建另一个索引。索引方面有很多警告。阅读下面的幻灯片 http://www.percona.com/sites/default/files/presentations/PMU-Bueno-Aires-2013-MySQL-Indexing-Best-Practices.pdf
最左边的索引示例:如果您在(a,b)上有索引并且运行
SELECT * FROM table ORDER BY a
它将使用索引,但
SELECT * FROM table ORDER BY b
没有。因此,仅在b上使用另一个索引将确保在订购数据时使用索引。
答案 1 :(得分:1)
顺序很重要;订单应与查询中的where语句匹配,否则将不使用索引 如果你在select语句中使用where子句,比如“where user_id = 1 and hash ='xxxxx'”,并且你的索引是hash,user_id则不会使用索引。 这里有更多的例子 http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html