[英]SQL_CALC_FOUND_ROWS and SELECT FOUND_ROWS() on UNION query (not UNION ALL) with LIMIT
[英]SELECT SQL_CALC_FOUND_ROWS Query very slow greater than 250000 records
當我們的表記錄少於150K時,此查詢工作正常,但是由於它無法正常工作而且非常慢-
SELECT SQL_CALC_FOUND_ROWS main_article.*
FROM main_articles
LEFT JOIN main_members
ON article_mem_id=member_id
WHERE `article_type`='2'
ORDER BY article_id
DESC LIMIT 0,20
如何改善查詢?
此博客中有一個很好的描述: https : //www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/
該演示表明,是的,當在大型表上使用SQL_CALC_FOUND_ROWS時,對性能非常不利。
通常最好分別運行兩個查詢:
/* no need to do the join in this case, because it won't affect the count */
SELECT COUNT(*)
FROM main_articles
WHERE `article_type`='2'
SELECT main_article.*
FROM main_articles
LEFT JOIN main_members
ON article_mem_id=member_id
WHERE `article_type`='2'
ORDER BY article_id
DESC LIMIT 0,20
順便說一句,這與SQL_CALC_FOUND_ROWS問題無關,但是我想知道為什么您要加入main_members
表。 您不會從中獲取任何列。 LEFT JOIN表示它不會限制行。 如果我可以從列名推斷出表關系,則main_members
中的main_articles
每一行只能有一行,因此main_articles
也不會增加行數。 因此,這樣做實際上沒有任何目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.