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)

 

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

 

轉自: http://blog.csdn.net/lwlsky/article/details/5620818


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM