Mysql
 sql >> Database >  >> RDS >> Mysql

SELECT SQL_CALC_FOUND_ROWS Query molto lenta maggiore di 250000 record

C'è una buona descrizione in questo blog:https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/

La dimostrazione mostra che sì, l'utilizzo di SQL_CALC_FOUND_ROWS è molto dannoso per le prestazioni quando lo usi su un tavolo di grandi dimensioni.

Spesso è meglio eseguire due query separatamente:

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

A proposito, questo non è correlato al problema SQL_CALC_FOUND_ROWS, ma mi chiedo perché ti stai unendo ai main_members tavolo. Non stai recuperando alcuna colonna da esso. Il LEFT JOIN significa che non limiterà le righe. Se posso dedurre la relazione della tabella dai nomi delle colonne, può esserci solo una riga in main_members per ogni riga in main_articles , quindi il join non aumenterà nemmeno il numero di righe. Quindi non c'è davvero alcuno scopo nel fare questo join.