[MS SQL]大量資料表隨機取出資料

有關資料庫的討論, 都可以在這發表哦~~
回覆文章
頭像
tim
文章: 1379
註冊時間: 2008年 11月 26日, 00:49

[MS SQL]大量資料表隨機取出資料

文章 tim »

一般在隨機取出資料時, 會使用 order by newid() 的方式來進行, 不過隨著資料量變大時, 這樣的方式將會使效率大幅下降.
解決的方式可以使用 TABLESAMPLE 的語法, 如下:

代碼: 選擇全部

SELECT * FROM TBL_TABLE1 TABLESAMPLE SYSTEM (300 rows) 
其中 300 rows 也可以用 10 PERCENT 如同 top 的語法.

這種方式將是以取樣的方式, 取出某些 page 的資料, 若是要隨機的話, 可以再下達 order by newid() 如下:

代碼: 選擇全部

SELECT TOP 5 * FROM TBL_TABLE1 TABLESAMPLE SYSTEM (300 rows) ORDER BY NEWID()
這樣的效率將可以大幅提升, 尤其是在大量資料的 table (不過資料量不大的 table 是不適合使用此法的)

另外的限制是必須為 local table (也就是儲在本地的資料表, 因為是利用 page 取出的), 不過後面的 300 rows 只會取出接近的筆數, 無法很精確, 所以要能確保數量的方式就是使用 top n 配合, 這樣效果應該能改善.

參考資料:
http://www.bhcode.net/article/20100629/11534.html
多多留言, 整理文章, 把經驗累積下來.....
回覆文章