使用带有order by的限制的意外空结果集

时间:2016-01-09 19:10:33

标签: mysql sql

我有一张包含数百万条记录的表格,而且我每天运行一次查询超过500天,最近它停止了工作。

查询如下:

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

返回空结果集。但是,如果我将限制更改为小于500的任何值,它可以正常工作。

如果我删除限制并使用order by执行COUNT(id),则返回数百万行表的计数。

3 个答案:

答案 0 :(得分:0)

我只能想象某种超时或错误发生。 order bylimit应该返回行,如果它们在那里。

首先,检查您是否收到错误。如果您是从应用程序调用,则需要检查错误状态。

如果超时,您可以考虑在table(column1 desc, column2 desc, column3 desc, id)上添加索引。这应该从根本上改善查询的性能。

答案 1 :(得分:0)

不确定它是如何发生的,但在优化表后它又开始工作......

答案 2 :(得分:0)

远程诊断这些问题确实很困难,而且经常可以在MySQL日志中找到更多信息 - 这些对于诊断异常行为非常有帮助。

另外,尝试运行您的查询:

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