[MS SQL]大量資料表隨機取出資料
發表於 : 2012年 1月 19日, 20:37
一般在隨機取出資料時, 會使用 order by newid() 的方式來進行, 不過隨著資料量變大時, 這樣的方式將會使效率大幅下降.
解決的方式可以使用 TABLESAMPLE 的語法, 如下:
其中 300 rows 也可以用 10 PERCENT 如同 top 的語法.
這種方式將是以取樣的方式, 取出某些 page 的資料, 若是要隨機的話, 可以再下達 order by newid() 如下:
這樣的效率將可以大幅提升, 尤其是在大量資料的 table (不過資料量不大的 table 是不適合使用此法的)
另外的限制是必須為 local table (也就是儲在本地的資料表, 因為是利用 page 取出的), 不過後面的 300 rows 只會取出接近的筆數, 無法很精確, 所以要能確保數量的方式就是使用 top n 配合, 這樣效果應該能改善.
參考資料:
http://www.bhcode.net/article/20100629/11534.html
解決的方式可以使用 TABLESAMPLE 的語法, 如下:
代碼: 選擇全部
SELECT * FROM TBL_TABLE1 TABLESAMPLE SYSTEM (300 rows)
這種方式將是以取樣的方式, 取出某些 page 的資料, 若是要隨機的話, 可以再下達 order by newid() 如下:
代碼: 選擇全部
SELECT TOP 5 * FROM TBL_TABLE1 TABLESAMPLE SYSTEM (300 rows) ORDER BY NEWID()
另外的限制是必須為 local table (也就是儲在本地的資料表, 因為是利用 page 取出的), 不過後面的 300 rows 只會取出接近的筆數, 無法很精確, 所以要能確保數量的方式就是使用 top n 配合, 這樣效果應該能改善.
參考資料:
http://www.bhcode.net/article/20100629/11534.html