我在1000~2000条记录的表格中拉大约20个随机行,大多数或全部附有WHERE子句。这不会增长太多,每年可能增加150个。
我最多只关注几千名用户,但这个查询是该网站热门区域的一部分。
我真的需要关注ORDER BY RAND()所涉及的性能命中吗?我听过所有关于性能问题的恐怖故事,但是当这样一个小桌子不断被击中时,我找不到多少。
我不能为此做一个缓存。
答案 0 :(得分:2)
ORDER BY RAND()
很容易被使用和遗忘,但你必须意识到MySQL需要检查每一行,因为RAND()
不是常数。
检查1000行应该不是问题,但要随时关注查询性能。如果你只需要一条记录,你可以在这里找到答案:ORDER BY RAND() alternative
修改强>
你说你不能做缓存,但即使是一个小的生成的.php文件也是一个缓存:)
例如,您可以在缓存中存储ID列表;每次插入或删除数据库记录时都会更新它。然后,您使用PHP提取20个随机ID,并使用它们查询数据库(使用例如IN (4, 7, 10, 45, etc.)
<强>更新强>
正如OP指出的那样,如果查询也有条件(即并非表格中的每个项目都可以被选中),这是不可能的。