我怀疑我知道这个问题的答案了,但......LIMIT子句对MySql性能的影响?
考虑以下3个MySQL语句...
SELECT SQL_CALC_FOUND_ROWS title FROM STUFF LIMIT 1000000, 1;
SELECT SQL_CALC_FOUND_ROWS title FROM STUFF LIMIT 1;
SELECT title FROM STUFF;
有三个之间的性能差异显著?
我怀疑我知道这个问题的答案了,但......LIMIT子句对MySql性能的影响?
考虑以下3个MySQL语句...
SELECT SQL_CALC_FOUND_ROWS title FROM STUFF LIMIT 1000000, 1;
SELECT SQL_CALC_FOUND_ROWS title FROM STUFF LIMIT 1;
SELECT title FROM STUFF;
有三个之间的性能差异显著?
SQL_CALC_FOUND_ROWS
需要遍历所有行来计算答案,所以在1和2之间没有时间百米运动员(除第一个查询,如果您在表中有较少的超过100万行可能不会返回任何东西)
第三个查询将输出整个表格,而不仅仅是对其行进行计数。
这取决于,如果您添加ORDER BY
并索引正在订购的列,它可以是显着更快。
这是因为它将被执行没有扫描和排序完整结果集。使用索引将生成一个索引范围扫描,只要生成所需的行数,将立即启动和停止索引范围扫描。
当然,他们是不同的查询;)我猜每个查询都会产生相同的结果? – JHollanti 2013-03-27 20:23:33
可能重复的[为什么MYSQL的LIMIT偏移量会减慢查询速度?](http://stackoverflow.com/questions/4481388/why-does-mysql-higher-limit-offset-slow-the-query-down) – 2013-03-27 20:25:23
如果你有100万行,'SQL_CALC_FOUND_ROWS'需要一段时间,无论如何。 – castis 2013-03-27 20:26:08