2016-01-09 52 views
0

我有一個數百萬記錄的表,我一直在運行這個查詢一天超過500天,最近它停止工作。意外的空結果集使用與訂單的限制

查詢如下所示:

SELECT id FROM table 
ORDER BY column1 desc, column2 desc, column3 desc 
LIMIT 522, 1 

這將返回一個空的結果集。但是,如果我將限制更改爲小於500的任何值,它都可以正常工作。

如果我刪除限制並按順序執行COUNT(id),它將返回數百萬行表的計數。

+1

也許你有少於522行 – Strawberry

+0

做一個SELECT COUNT提到返回數超過100萬 – endyourif

回答

0

不知道它究竟是如何發生的,但它的優化再開始工作表...之後

0

我只能想象某種超時或錯誤發生。 order bylimit應該返回行,如果他們在那裏。

首先,檢查您是否收到錯誤。如果您從應用程序調用,則需要檢查錯誤狀態。

對於超時,您可能會考慮在table(column1 desc, column2 desc, column3 desc, id)上添加索引。這應該從根本上改善查詢的性能。

0

這實在是很難遠程和經常診斷這些問題,你可以找到在MySQL日誌的詳細信息 - 這些對診斷異常行爲非常有幫助。

此外,嘗試運行您的查詢是這樣的:

SELECT id FROM 
(SELECT id FROM table 
ORDER BY column1 desc, column2 desc, column3 desc) r 
LIMIT 522, 1