Mysql
 sql >> база данни >  >> RDS >> Mysql

SELECT SQL_CALC_FOUND_ROWS Заявка много бавно повече от 250 000 записа

В този блог има добро описание:https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/

Демонстрацията показва, че да, използването на SQL_CALC_FOUND_ROWS е много лошо за производителността, когато го използвате на голяма маса.

Често е по-добре да изпълнявате две заявки поотделно:

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

Между другото, това не е свързано с проблема SQL_CALC_FOUND_ROWS, но се чудя защо се присъединявате към main_members маса. Не извличате никакви колони от него. LEFT JOIN означава, че няма да ограничи редовете. Ако мога да изведа връзката на таблицата от имената на колоните, може да има само един ред в main_members за всеки ред в main_articles , така че присъединяването също няма да увеличи броя на редовете. Така че наистина няма смисъл да правите това присъединяване.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на ключова дума срещу клауза ON - MYSQL

  2. Php Формат на времето

  3. Mysql - Сумиране на броя на множество свързани таблици

  4. Атомна многоредова актуализация с уникално ограничение

  5. Потребител с опция за предоставяне не може да предостави създаване на потребител