SQL 隨機抽樣的總結
阿新 • • 發佈:2019-01-24
對於SQL 隨機抽樣我們常想到的就是newid(),但如果對於一個在百萬、千萬甚至更大海量資料表中抽樣的話,簡單的newid(),其效能,效率就不是很理想了。所以在這裡有必要討論一下,擇優而用。
long_goods是一個百萬資料的表,Ctrl+L執行以下語句:
--id_index是我為主鍵加的一個非聚焦索引
SELECT top 1* FROM long_goods order by newid()
--查詢開銷 43%
SELECT top 1* FROM long_goods with(index=id_index) order by newid()
--查詢開銷 54%
select
--查詢開銷 1%
select top 1 * from long_goods where id=(select top 1 id from long_goods with(index=id_index) order by newid())
--查詢開銷 1%
雖然第三個與第四個的開銷是一樣,但實際應該是第四種優於第三種。
如果MS SQL2005升級到支援TABLESAMPLE 的話,以下語句的抽樣執行效率可為最優的
SELECT
呵呵..下班了,至於其中原因,下次有空再續.