听起来好像有点联系,当我尝试优化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
指定它。如果您要限制结果集,那么您绝对应该这样做。