Rik*_*ood 7 mysql random performance
我目前有一个查询结束,ORDER BY RAND(HOUR(NOW())) LIMIT 40以获得40个随机结果.结果列表每小时更改一次.
这会终止查询缓存,这会破坏性能.
你能否建议另一种方法来获得随时变化的随机(ish)结果集?它不一定是每个小时,也不一定是完全随机的.
我更喜欢随机结果,而不是在表格中的任意字段上排序,但我会这样做作为最后的手段......
(这是我想要随时改变的新产品列表).
如果你有一个ID列,最好做一个:
-- create a variable to hold the random number
SET @rownum := SELECT count(*) FROM table;
SET @row := (SELECT CEIL((rand() * @rownum));
-- use the random number to select on the id column
SELECT * from tablle WHERE id = @row;
Run Code Online (Sandbox Code Playgroud)
选择随机id号的逻辑可以移动到应用程序级别.
SELECT * FROM table ORDER BY RAND LIMIT 40
Run Code Online (Sandbox Code Playgroud)
是非常低效的,因为MySQL将处理表中的所有记录,对所有行执行全表扫描,随机排序.
它会杀死缓存,因为你每次都期望得到不同的结果集.您无法缓存一组随机值.如果要缓存一组结果,请缓存一大组随机值,然后在您要使用这些值的子部分内,在较小的集合[sql]之外进行随机抓取.
我认为更好的方法是将产品标识符下载到中间层,在需要时选择随机 40 个值(每小时一次或针对每个请求)并在查询中使用它们:product_id in (@id_1, @id_2, ..., @id_40)。
| 归档时间: |
|
| 查看次数: |
5119 次 |
| 最近记录: |