2013-03-27 69 views
0

我怀疑我知道这个问题的答案了,但......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; 

有三个之间的性能差异显著?

+0

当然,他们是不同的查询;)我猜每个查询都会产生相同的结果? – JHollanti 2013-03-27 20:23:33

+0

可能重复的[为什么MYSQL的LIMIT偏移量会减慢查询速度?](http://stackoverflow.com/questions/4481388/why-does-mysql-higher-limit-offset-slow-the-query-down) – 2013-03-27 20:25:23

+0

如果你有100万行,'SQL_CALC_FOUND_ROWS'需要一段时间,无论如何。 – castis 2013-03-27 20:26:08

回答

1

SQL_CALC_FOUND_ROWS需要遍历所有行来计算答案,所以在1和2之间没有时间百米运动员(除第一个查询,如果您在表中有较少的超过100万行可能不会返回任何东西)

第三个查询将输出整个表格,而不仅仅是对其行进行计数。

0

这取决于,如果您添加ORDER BY并索引正在订购的列,它可以是显着更快

这是因为它将被执行没有扫描和排序完整结果集。使用索引将生成一个索引范围扫描,只要生成所需的行数,将立即启动和停止索引范围扫描。