sql >> Databasteknik >  >> RDS >> Mysql

Välj fråga med tre där villkoren är långsamma, men samma fråga med valfri kombination av två av de tre där villkoren är snabba

Försök att dela upp befintlig SQL i två delar och se vilka exekveringstider som är för varje. Detta skulle förhoppningsvis ge dig vilken del som är ansvarig för långsamheten:

del 1:

SELECT table_1.id
  FROM table_1
  LEFT JOIN table_2
    ON (table_1.id = table_2.id)
 WHERE table_1.col_condition_1 = 0
   AND table_1.col_condition_2 NOT IN (3, 4)
   AND table_2.id is NULL

och del 2 (notera den inre sammanfogningen här):

SELECT table_1.id
  FROM table_1
  JOIN table_2
    ON (table_1.id = table_2.id)
 WHERE table_1.col_condition_1 = 0
   AND table_1.col_condition_2 NOT IN (3, 4)
   AND table_1.date_col > table_2.date_col

Jag förväntar mig att del 2 kommer att ta längre tid. I detta tror jag att ett index på både table_1 och table_2 på date_coll skulle hjälpa.

Jag tror inte att det sammansatta indexet skulle hjälpa alls i ditt val.

Detta sa att det är svårt att diagnostisera varför de tre tillstånden tillsammans skulle påverka prestandan så illa. Det verkar vara relaterat till din datadistribution. Inte säker på mySql men i Oracle skulle en statistikinsamling på dessa tabeller göra skillnad.

Hoppas det hjälper.



  1. Kul med meddelanden

  2. MySQL GROUP_CONCAT:Formatering av utdata

  3. Hur date_part() fungerar i PostgreSQL

  4. mysql namnkonvention