sql >> Databáze >  >> RDS >> Mysql

SELECT SQL_CALC_FOUND_ROWS Dotaz velmi pomalý větší než 250 000 záznamů

V tomto blogu je dobrý popis:https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/

Ukázka ukazuje, že ano, použití SQL_CALC_FOUND_ROWS je velmi špatné pro výkon, když jej používáte na velkém stole.

Často je lepší spustit dva dotazy samostatně:

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

Mimochodem, toto nesouvisí s problémem SQL_CALC_FOUND_ROWS, ale zajímalo by mě, proč se připojujete k main_members stůl. Nenačítáte z něj žádné sloupce. LEFT JOIN znamená, že nebude omezovat řádky. Pokud mohu odvodit vztah tabulky z názvů sloupců, může být v main_members pouze jeden řádek pro každý řádek v main_articles , takže spojení nezvýší ani počet řádků. Takže toto spojení opravdu nemá smysl.




  1. Výběr náhodného záznamu z databáze MySQL

  2. Mysql:výsledky za posledních sedm dní

  3. Můžeme použít rámec Meteor s databází mysql

  4. Nejlepší typ indexování, pokud existuje klauzule LIKE