Mysql - 多列索引的序列

时间:2010-06-30 06:33:41

标签: mysql indexing

假设我的查询看起来像这样:

SELECT * FROM table WHERE category='5' and status='1' LIMIT 5

该表有100万行。

为了加快速度,我创建索引(状态,类别),即多列索引。

有600个类别,但只有2个状态(1或0)。如果我创建索引(类别,状态)而不是索引(状态,类别),我想知道性能是否有任何差异。

2 个答案:

答案 0 :(得分:4)

状态优先。 如果你只需要按类别查询就可以了。

SELECT * from table where status in (1,0) and category = 'whatever'

仍然可以获得索引支持。 当然,如果您的查询都使用两个列,则无论哪种方式相同,,但在这种情况下,如果您仅使用状态,那就更好了,只有类别只会稍差一些。

如果您正在查看大量插入内容,您希望最小化索引数量,因此这是您最好的选择,而不是拥有多个索引。

答案 1 :(得分:2)

应该没有任何区别。无论您是订购它(类别,状态)还是(状态,类别),索引的选择性都是相同的。

顺便说一下,如果不使用ORDER BY,使用LIMIT通常是没有意义的。除非您指定订单,否则SQL查询返回的行的顺序是任意的。


重新评论:是的,通常需要五个随机行,但任意与随机不一样。需要五个任意行并不常见。