正如吉日Tousek說,每運行一個查詢必須知道什麼返回前面的查詢。
不是將先前返回的行的ID插入表中,而是檢查新的結果是不是在該表中,我只是簡單地向表中添加一列,並使用隨機數來定義一個新的隨機順序的行。
您需要用隨機數一次此列。
這會記得行的隨機順序,並使其穩定,因此,所有你需要你的查詢之間要記住的是多少隨意行到現在爲止您要求。然後,從您在先前查詢中停止的位置開始,根據需要獲取儘可能多的行。
將一列RandomNumber binary(8)
添加到表中。您可以選擇不同的尺寸。 8個字節應該足夠了。
用隨機數填充它。一旦。
UPDATE tablename
SET RandomNumber = CRYPT_GEN_RANDOM(8)
在RandomNumber
列創建索引。獨特的索引。如果事實證明有重複的隨機數(這對於20,000行是不可能的,對於8個字節的隨機數是不可能的),然後重新生成隨機數(再次運行UPDATE
語句),直到所有數字都是唯一的。
申請前10個隨機行:
SELECT TOP(10) *
FROM tablename
ORDER BY RandomNumber
當你處理/使用這些10個隨機行記得上次使用的隨機數。最好的方法取決於你如何處理這10個隨機行。
DECLARE @VarLastRandomNumber binary(8);
SET @VarLastRandomNumber = ...
-- the random number from the last row returned by the previous query
請求下一個10個隨機行:
SELECT TOP(10) *
FROM tablename
WHERE RandomNumber > @VarLastRandomNumber
ORDER BY RandomNumber
過程並記住上次使用的隨機數。
重複。作爲獎勵,您可以在每次迭代中請求不同數量的隨機行(每次不一定是10)。
顯示樣本數據請。 – NEER