簡體   English   中英

SELECT SQL_CALC_FOUND_ROWS查詢非常慢,大於250000條記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM