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

Složený index MySql

Toto je váš první dotaz:

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;

Lepší je to napsat 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;

Nejlepší index je pravděpodobně:campaign_logs(domain, campaign_id, log_type, log_time, subscriber_id) . Toto je krycí index pro dotaz. První tři klíče by měly být použity pro where filtrování.



  1. Musíte deklarovat skalární proměnnou @Id?

  2. Správné použití transakcí na serveru SQL Server

  3. Chyba instalace Sphinx 2.0.4 s MAMP 2.0:Nelze najít záhlaví MySQL

  4. Databázová služba MySQL – nové inovace HeatWave