--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,你可以看到只有幾個邏輯和物理讀取 --結論:最后兩種速度快,效率高
