sql >> Database >  >> RDS >> Mysql

SELECT SQL_CALC_FOUND_ROWS Query zeer traag groter dan 250000 records

Er staat een goede beschrijving in deze blog:https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/

De demonstratie laat zien dat ja, het gebruik van SQL_CALC_FOUND_ROWS erg slecht is voor de prestaties als je het op een grote tafel gebruikt.

Het is vaak beter om twee zoekopdrachten afzonderlijk uit te voeren:

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

Dit heeft trouwens niets te maken met het probleem SQL_CALC_FOUND_ROWS, maar ik vraag me af waarom je lid wordt van de main_members tafel. Je haalt er geen kolommen uit. De LEFT JOIN betekent dat het de rijen niet beperkt. Als ik de tabelrelatie kan afleiden uit de kolomnamen, kan er maar één rij zijn in main_members voor elke rij in main_articles , dus de join verhoogt ook niet het aantal rijen. Het heeft dus echt geen zin om deze join te doen.




  1. Is het mogelijk om een ​​tekstbestand uit te voeren vanuit een SQL-query?

  2. Hoe te controleren of de ID van de Facebook-gebruiker al bestaat voordat de app wordt gestart?

  3. Een MySQL-installatie maken voor lokaal testen

  4. Subquery's versus joins