sql >> Database >  >> RDS >> Mysql

Selecteer een zoekopdracht met drie waarbij de voorwaarden langzaam zijn, maar dezelfde zoekopdracht met een combinatie van twee van de drie waarbij de voorwaarden snel zijn

Probeer de bestaande SQL in twee delen te splitsen en kijk wat de uitvoeringstijden voor elk zijn. Dit geeft hopelijk aan welk deel verantwoordelijk is voor de traagheid:

deel 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

en deel 2 (let hier op de inner join):

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

Ik verwacht dat deel 2 langer gaat duren. Hierbij denk ik dat een index op zowel table_1 als table_2 op date_coll zou helpen.

Ik denk niet dat de samengestelde index zou helpen bij je keuze.

Dit gezegd hebbende, is het moeilijk te diagnosticeren waarom de drie voorwaarden samen de prestaties zo slecht zouden beïnvloeden. Het lijkt verband te houden met uw gegevensdistributie. Niet zeker over mySql, maar in Oracle zou een verzameling statistieken over die tabellen een verschil maken.

Ik hoop dat het helpt.



  1. Sjablonen gebruiken in SQL Server Management Studio (SSMS) - SQL Server / TSQL-zelfstudie, deel 16

  2. Rails:Postgres-toestemming geweigerd om database op rake te maken db:create:all

  3. Concept:Java-programma bouwen en in Oracle DB laden - Wrapper-functie roept java-functie aan met return

  4. Beste opties voor databasecontrole die beschikbaar zijn voor uw bedrijf