我有兩個表:posts
用10k行和comments
,我需要選擇換言之posts
特定編號的所有comments
通過posts
表實現分頁,並得到所有comments
上。爲此我有下一個查詢:如何提高MySQL子查詢中的LIMIT子句?
select * from comments c
inner join (select post_id from posts o order by post_id limit 0, 10) p
on c.post_id = p.post_id;
此外,這對我來說是非常重要的查詢性能。但此查詢的Explain
是很奇怪的,因爲LIMIT
條款通過9976 rows
但不通過10行迭代如我所料:
同時當我運行子查詢單獨它通過10行迭代的偉大工程預期:
explain select post_id from posts o order by post_id limit 0, 10
也有indexes
on posts(post_id), comments(comment_id), comments(post_id)
。 我不明白這個查詢有什麼問題,所以它遍歷帖子表中的所有記錄。如果有人幫我解決這個問題,我將非常感激。
我相信子選擇對於外部選擇中的每個記錄都重複迭代,這就是爲什麼看起來如此之高。您可能可能重構查詢,以避免子選擇 – Vinbot
可能重複[如何提高MySQL中的限制條款](http://stackoverflow.com/questions/29649131/how-to-improve-limit-clause-in-mysql ) – Siyual
@Vinbot實際上我不知道如何使用不同的查詢結構實現與分頁相同的結果。你能舉個例子嗎? – Speise