听起来好像有点联系,当我尝试优化limit时偶尔会发现这一点。

askid是PK,该表有114万行。
我无法提供该表,因为它处于生产环境中。

我尝试

SELECT askid FROM ask limit 1000000,1;

回报1001747

然后我尝试

SELECT * FROM ask limit 1000000,1;

回报1000627

askid有索引并且会影响结果,但是我认为结果应该相同,不是吗?

SELECT askid FROM ask ORDER BY askid LIMIT 1000000,1;

返回1000627。

但是为什么ORDER BY很重要?askid索引有问题吗?

性能差异很大。
第一个耗时0.2秒;
第二个需要2秒;
第三个需要1秒;
如何优化它并获得正确的结果?

我使用的mysql版本是5.6.10

最佳答案

SQL无法保证行顺序,它会根据您的查询选择最适合计划的内容。

如果希望订购,请使用order by指定它。如果您要限制结果集,那么您绝对应该这样做。

09-28 08:36