SQL Server返回隨機記錄

常見的,不一定是最好的

說到返回隨機行,很人一般會想到用GUID來排序,這是網上最常用的解決方案:

Select Top 100 * From Sales.SalesOrderDetail
Order By NewID()

但是這個方案的性能並不很好,因爲無法使用索引,每次還要對GUID進行排序

TableSample

這是MSSQL2005開始出現的關鍵字,TableSample可以用來快速返回樣本行數據:

SELECT * FROM Sales.SalesOrderDetail TABLESAMPLE(100 ROWS)

實際使用後,卻發現這個寫法每次都返回不同的行數,甚至返回0行,後來知道它隨機選取的單位是數據頁。

真正的隨機返回

下面這個寫法是從TableSample的幫助文檔中發現的,真正的隨機返回,而且效率驚人:

SELECT Top 100 * FROM Sales.SalesOrderDetail
WHERE 0.01 >= CAST(CHECKSUM(NEWID(), SalesOrderID) & 0x7fffffff AS float)/ CAST (0x7fffffff AS int)

猜你喜欢

转载自blog.csdn.net/benjayming/article/details/45741533