使用 MYSQL,我希望选择
1)按“价格”列排序后前20行中随机5行
2)按“价格”列排序后的 30 个下一个结果(第 21-50 行)中的 15 个随机行
使用 SQL 实现这种性能的最佳方法是什么?请注意,该表包含大约 1,000,000 行。
最终目的是为这些随机选择的行更新一列 (SET status=1)。
使用嵌套选择 - 在这种情况下应该很快
select * from
(
select .... from table
order by price
limit X, Y
)
order by random
用适当的值替换 X 和 Y
请注意,根据特定的 RDBMS,“随机排序”和“限制”子句可能会有所不同!这是 MySQL 的方式。
最重要的是服务器将首先进行内部选择,这将仅返回 20-30 行(取决于限制子句),您可以在外部选择中以随机顺序对其进行排序。如果价格列被索引,这将足够快
( SELECT dt.*
FROM
( SELECT t.* -- columns you need from the table
FROM tableX AS t -- your table name in place of "tableX"
ORDER BY price DESC
LIMIT 20
OFFSET 0
) AS dt
ORDER BY RAND()
LIMIT 5
)
UNION ALL
(
SELECT dt.*
FROM
( SELECT t.*
FROM tableX AS t
ORDER BY price DESC
LIMIT 30
OFFSET 20
) AS dt
ORDER BY RAND()
LIMIT 15
) ;