【问题标题】:MySQL Performance - Large Table Random Row with Where ClauseMySQL 性能 - 带有 Where 子句的大表随机行
【发布时间】:2012-06-15 02:03:57
【问题描述】:

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

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

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

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

SELECT col1, col2, col3 FROM tbl WHERE RAND()

这通常会返回 14-16 行,所以这没什么大不了的。我不需要它准确地返回 15,但关闭。此选项将查询时间缩短了一秒,但对于生产用途来说仍然太长了。

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

也许我只是想多了。有没有人用过的好替代品?

谢谢!

【问题讨论】:

    标签: mysql performance random where-clause


    【解决方案1】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 2015-05-28
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多