[英]SQL selecting X random rows within top Y after ordering
我希望使用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行(取決於limit子句),您可以在外部選擇中以隨機順序對其進行排序。 如果將價格列編入索引,這將足夠快
( 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
) ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.