MySQL性能 - 具有Where子句的大表随机行

时间:2012-06-12 07:44:17

标签: mysql performance random where-clause

我有一个MySQL表,目前存储了大约330,000条记录。我需要编写一个快速有效的查询来拉出15个随机记录,但是使用基于标志的where子句。

例如,我尝试了几个选项(我可能会添加效率很低):

SELECT col1,col2,col3 FROM tbl WHERE标志IN('opt1','opt2','opt3')ORDER BY RAND()LIMIT 15;

此查询大约需要3秒,这太慢了。我正在使用的另一个选项是获取返回的所需行数(在本例中为15)并除以请求标志的行数#(等于$ x),然后运行此查询:

SELECT col1,col2,col3 FROM tbl WHERE RAND()< ='$ x'AND flag IN('opt1','opt2','opt3');

这通常会返回14-16行,所以这不是什么大问题。我不需要它返回15,但关闭。此选项在查询时间内缩短了一秒,但对于生产使用来说仍然太高。

我应该注意所有记录都有一个指定的ID#,从1开始。没有漏洞。

也许我只是过度思考这个问题。有没有人有他们用过的好选择?

谢谢!

1 个答案:

答案 0 :(得分:0)

在调用查询之前在内存中生成15个整数ID ...您已添加了一个很好的IN子句。当然,你必须先获得最大ID。