1. 程式人生 > >SQL 隨機抽樣的總結

SQL 隨機抽樣的總結

對於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

top 1 * from long_goods where id=(select top 1 id from long_goods order by newid())

--查詢開銷 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

* FROM long_goods TABLESAMPLE SYSTEM (10 PERCENT)

呵呵..下班了,至於其中原因,下次有空再續.