我有一些我想使用基於遊標的分頁查詢的表,但它需要申請多個列。基於MySQL遊標的多列分頁
讓我們用2列一個簡單的例子 - 我取的第一頁是這樣的:
SELECT column_1, column_2
FROM table_name
ORDER BY column_1, column_2
LIMIT 10
後,我得到的結果,我可以獲取基於最後一排的下一個頁面。假設最後一行是column_1 = 5, column_2 = 8
。我想這樣做:
SELECT column_1, column_2
FROM table_name
WHERE column_1 > 5 AND column_2 > 8
ORDER BY column_1, column_2
LIMIT 10
但這顯然是錯誤的。這將篩選出具有column_1 = 5, column_2 = 9
(因爲column_1
過濾器)的行或具有column_1 = 6, column_2 = 6
行(因爲column_2
過濾器)
我可以做這樣的事情,以避免該問題:
SELECT column_1, column_2
FROM table_name
WHERE column_1 > 5
OR (column_1 = 5 AND column_2 > 8)
ORDER BY column_1, column_2
LIMIT 10
但這變得非常繁瑣,而且容易出錯超過2列...
而且,我的用例包括了多種類型(INT UNSIGNED
和BINARY
)列,但都相當的
你有什麼建議嗎?
謝謝!
感謝您的詳細解答! 我嘗試使用簡單的「元組」比較,它工作(MySQL 5.6)。嘗試運行一些'EXPLAIN'查詢來查看它是否比擴展版本更好... – amitayh
哈!我不知道MySQL支持那個元組比較語法!比擴展更容易......(c1,c2,c3)>(r1,r2,r3)。是的,請檢查EXPLAIN計劃......我們希望MySQL使用索引範圍掃描操作,並將c1,c2,c3作爲主要列。 – spencer7593