sql >> Databasteknik >  >> RDS >> Mysql

VÄLJ SQL_CALC_FOUND_ROWS Fråga mycket långsam mer än 250 000 poster

Det finns en bra beskrivning i den här bloggen:https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/

Demonstrationen visar att ja, att använda SQL_CALC_FOUND_ROWS är mycket dåligt för prestanda när du använder det på ett stort bord.

Det är ofta bättre att köra två frågor separat:

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

Förresten, detta är inte relaterat till SQL_CALC_FOUND_ROWS-problemet, men jag undrar varför du går med i main_members tabell. Du hämtar inga kolumner från den. LEFT JOIN betyder att den inte begränsar raderna. Om jag kan härleda tabellrelationen från kolumnnamnen kan det bara finnas en rad i main_members för varje rad i main_articles , så sammanfogningen kommer inte att öka antalet rader heller. Så det finns egentligen inget syfte med att göra detta gå med.




  1. MySql arbetsbänk KONTROLLERA begränsning

  2. Hur man får den aktuella tiden i SQLite

  3. Få kortdagsnamnet i PostgreSQL

  4. ta bort rad i min databas med php pdo