我已經做了很多的閱讀返回隨機行去年成立,我們想出瞭解決方案是
ORDER BY newid()
這對於< 5k行很好。但是,當我們獲得> 10-20k行時,我們正在獲取SQL超時,計劃執行計劃告訴我,我的查詢成本中有76%來自此行。當我們有大量的行時,刪除這條線會使速度增加一個數量級。
我們的用戶有這樣的要求,一次做多達100K行。
給你更多的細節。
我們有一張有260萬個4位字母數字代碼的表格。我們隨機使用這些來獲得進入場地的權限。例如,如果我們有一個容量爲5000的事件,則隨機抽取5000個這樣的數據,然後將其作爲條形碼發送給每個客戶,然後在門口的條形碼掃描應用程序同樣的列表是5000.使用4位字母數字代碼(而不是像GUID那樣的一個愚蠢的長數字)的原因是人們很容易寫下數字(或將它短信給朋友),只需將號碼並手動輸入,所以我們不需要大量的字符。客戶喜歡最後一點btw。
有沒有比ORDER BY newid()
更好的方法,還是有更快的方式從2.6米的表中獲得100k隨機行?
哦,我們使用的是MS SQL 2005
感謝,
喬
一個有趣的閱讀這裏:http://www.sqlteam.com/article/returning-rows-in-random-order-part-ii-revenge-of-the-randomizer – 2010-02-23 23:59:31