我有一個數百萬記錄的表,我一直在運行這個查詢一天超過500天,最近它停止工作。意外的空結果集使用與訂單的限制
查詢如下所示:
SELECT id FROM table
ORDER BY column1 desc, column2 desc, column3 desc
LIMIT 522, 1
這將返回一個空的結果集。但是,如果我將限制更改爲小於500的任何值,它都可以正常工作。
如果我刪除限制並按順序執行COUNT(id),它將返回數百萬行表的計數。
我有一個數百萬記錄的表,我一直在運行這個查詢一天超過500天,最近它停止工作。意外的空結果集使用與訂單的限制
查詢如下所示:
SELECT id FROM table
ORDER BY column1 desc, column2 desc, column3 desc
LIMIT 522, 1
這將返回一個空的結果集。但是,如果我將限制更改爲小於500的任何值,它都可以正常工作。
如果我刪除限制並按順序執行COUNT(id),它將返回數百萬行表的計數。
不知道它究竟是如何發生的,但它的優化再開始工作表...之後
我只能想象某種超時或錯誤發生。 order by
和limit
應該返回行,如果他們在那裏。
首先,檢查您是否收到錯誤。如果您從應用程序調用,則需要檢查錯誤狀態。
對於超時,您可能會考慮在table(column1 desc, column2 desc, column3 desc, id)
上添加索引。這應該從根本上改善查詢的性能。
這實在是很難遠程和經常診斷這些問題,你可以找到在MySQL日誌的詳細信息 - 這些對診斷異常行爲非常有幫助。
此外,嘗試運行您的查詢是這樣的:
SELECT id FROM
(SELECT id FROM table
ORDER BY column1 desc, column2 desc, column3 desc) r
LIMIT 522, 1
也許你有少於522行 – Strawberry
做一個SELECT COUNT提到返回數超過100萬 – endyourif