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

MySQL БРОЙ на множество леви съединения - оптимизация

Трябва да преработите заявката си. Можете да направите това, като пренаредите начина, по който заявката събира данните. Как?

  • Първо приложете клаузата WHERE
  • Прилагайте JOIN последни

Ето вашата оригинална заявка:

SELECT t1.num1,t2.num2,t3.num3 
FROM member m 
LEFT JOIN 
( 
   SELECT member_id,COUNT(*) as num1 
   FROM table1 
   GROUP BY member_id 
) t1 ON t1.member_id = m.member_id 
LEFT JOIN 
( 
   SELECT member_id,COUNT(*) as num2 
   FROM table2 
   GROUP BY member_id 
) t2 ON t2.member_id = m.member_id 
LEFT JOIN 
( 
   SELECT member_id,COUNT(*) as num3 
   FROM table3 
   GROUP BY member_id 
) t3 ON t3.member_id = m.member_id 
WHERE m.member_id = 27 

Ето ви новото запитване

SELECT
   IFNULL(t1.num1,0) num1,
   IFNULL(t1.num2,0) num2,
   IFNULL(t1.num3,0) num3
FROM
(
   SELECT * FROM member m 
   WHERE member_id = 27
) 
LEFT JOIN 
( 
   SELECT member_id,COUNT(*) as num1 
   FROM table1 
   WHERE member_id = 27
   GROUP BY member_id 
) t1 ON t1.member_id = m.member_id 
LEFT JOIN 
( 
   SELECT member_id,COUNT(*) as num2 
   FROM table2 
   WHERE member_id = 27
   GROUP BY member_id 
) t2 ON t2.member_id = m.member_id 
LEFT JOIN 
( 
   SELECT member_id,COUNT(*) as num3 
   FROM table3 
   WHERE member_id = 27
   GROUP BY member_id 
) t3 ON t3.member_id = m.member_id 
;

Между другото промених member m в SELECT * FROM member m WHERE member_id = 27 в случай, че имате нужда от информация за член 27. Добавих и IFNULL функция към всеки резултат, за да произведе 0 в случай, че броят е NULL.

Трябва да сте абсолютно сигурни

  • member_id е първичният ключ на членската таблица
  • member_id е индексиран в table1, table2 и table3

Опитайте!!!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да направя таблица на mysql с колони за дата и час?

  2. Форматирайте MySQL с помощта на CONCAT

  3. Вмъкване на масив в колона на mysql база данни

  4. Предотвратете вмъкване на дата и час в базата данни

  5. Съобщение за грешка Незавършен низов литерал