sql >> Base de Datos >  >> RDS >> Mysql

SELECCIONE SQL_CALC_FOUND_ROWS Consulta muy lenta superior a 250000 registros

Hay una buena descripción en este blog:https://www.percona.com/blog/2007/08/28/a-sql_calc_found_rows-o-no-a-sql_calc_found_rows/

La demostración muestra que sí, usar SQL_CALC_FOUND_ROWS es muy malo para el rendimiento cuando lo usa en una tabla grande.

A menudo es mejor ejecutar dos consultas por separado:

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

Por cierto, esto no está relacionado con el problema de SQL_CALC_FOUND_ROWS, pero me pregunto por qué te estás uniendo a main_members mesa. No está obteniendo ninguna columna de él. LEFT JOIN significa que no restringirá las filas. Si puedo inferir la relación de la tabla a partir de los nombres de las columnas, solo puede haber una fila en main_members para cada fila en main_articles , por lo que la combinación tampoco aumentará el número de filas. Así que realmente no tiene sentido hacer esta unión.