MySQL复合键最佳实践

时间:2014-02-26 16:15:36

标签: mysql sql performance composite-key

我认为这是一个表现问题。

创建复合键时订单是否重要?

在我的实例中,复合键是使用名为hash的128位字符和名为user_id的外键(int)创建的。

例如,(hashuser_id)会比(user_idhash)更快吗?

复合键是否会变慢,例如,如果它在连接中使用?

CREATE INDEX composite_hash_user_id_index ON `user_false_positives` (`hash`, `user_id`);

2 个答案:

答案 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