2013-03-27 101 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並索引正在訂購的列,它可以是顯着更快

這是因爲它將被執行沒有掃描和排序完整結果集。使用索引將生成一個索引範圍掃描,只要生成所需的行數,將立即啓動和停止索引範圍掃描。