Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Złożony indeks MySQL

To jest Twoje pierwsze zapytanie:

SELECT A.log_type, count(*) as distinct_count, sum(A.total_count) as total_count
from (SELECT log_type, count(subscriber_id) as total_count
      FROM stats.campaign_logs
      WHERE domain = 'xxx' AND campaign_id = '12345' AND
            log_type IN ('EMAIL_SENT', 'EMAIL_CLICKED', 'EMAIL_OPENED', 'UNSUBSCRIBED') AND
             DATE(CONVERT_TZ(log_time,'+00:00','+05:30')) BETWEEN DATE('2015-02-12 00:00:00') AND DATE('2015-02-19 23:59:58')
      GROUP BY subscriber_id,log_type) A
GROUP BY A.log_type;

Lepiej jest napisać jako:

      SELECT log_type, count(DISTINCT subscriber_id) as total_count
      FROM stats.campaign_logs
      WHERE domain = 'xxx' AND campaign_id = '12345' AND
            log_type IN ('EMAIL_SENT', 'EMAIL_CLICKED', 'EMAIL_OPENED', 'UNSUBSCRIBED') AND
             DATE(CONVERT_TZ(log_time, '+00:00', '+05:30')) BETWEEN DATE('2015-02-12 00:00:00') AND DATE('2015-02-19 23:59:58')
      GROUP BY log_type;

Najlepszym indeksem na ten temat jest prawdopodobnie:campaign_logs(domain, campaign_id, log_type, log_time, subscriber_id) . Jest to indeks obejmujący zapytanie. Pierwsze trzy klawisze powinny być używane dla where filtracja.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę dodać ograniczenie ON DELETE na stole?

  2. Prześlij obraz do bazy danych MYSQL i wyświetl go za pomocą PHP z Swift

  3. Przechowywanie wartości skrótu SHA1 w MySQL

  4. Definiowanie klucza złożonego z automatycznym przyrostem w MySQL

  5. Pytanie MySQL dotyczące planowania