sql server 隨機讀取數據


 

--sql server 隨機讀取數據

SELECT TOP 1 * FROM [tablename] ORDER BY NEWID()
SELECT * FROM [tablename] where pk in (select top 1 pk from [tablename] ORDER BY NEWID())
--這兩個方法都需要排序,因此IO的邏輯讀取會比較多,而且CPU占用也多很多
select top 1 * from tbname TABLESAMPLE(XXX rows)
--XXX應該為整數,算法如下:
--按照你表的行大小,計算一個數據頁大概裝多少行,XXX最少為每頁的行數,建議填為2-3倍每頁行數
--如果不願意去算這個數,也可以寫成如下形式:
select top 1 * from tbname TABLESAMPLE(0.1 PERCENT)
--由於TABLESAMPLE選項只是讀取整頁的數據,因此即使是很大很大的表,讀取幾個頁的速度還是很快的
--使用TABLESAMPLE選項,數據庫隨機取一個或者幾個數據頁,然后返回結果,不掃描索引,也不做全表掃描,也不排序。
--這個時候不要被執行計划所誤導,執行計划寫的是Table Scan.
--這個時候SET STATISTICS IO ON,你可以看到只有幾個邏輯和物理讀取
--結論:最后兩種速度快,效率高

 


免責聲明!

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



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