Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SELECT SQL_CALC_FOUND_ROWS Abfrage sehr langsam, mehr als 250000 Datensätze

Es gibt eine gute Beschreibung in diesem Blog:https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/

Die Demonstration zeigt, ja, die Verwendung von SQL_CALC_FOUND_ROWS ist sehr schlecht für die Leistung, wenn Sie es für eine große Tabelle verwenden.

Es ist oft besser, zwei Abfragen separat auszuführen:

/* 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

Übrigens hat dies nichts mit dem SQL_CALC_FOUND_ROWS-Problem zu tun, aber ich frage mich, warum Sie den main_members beitreten Tisch. Sie holen keine Spalten daraus. Der LEFT JOIN bedeutet, dass die Zeilen nicht eingeschränkt werden. Wenn ich die Tabellenbeziehung aus den Spaltennamen ableiten kann, kann es in main_members nur eine Zeile geben für jede Zeile in main_articles , sodass der Join die Anzahl der Zeilen auch nicht erhöht. Es gibt also wirklich keinen Zweck, diesen Join durchzuführen.