sql >> Database teknologi >  >> RDS >> Mysql

Vælg forespørgsel med tre, hvor betingelserne er langsomme, men den samme forespørgsel med enhver kombination af to af de tre, hvor betingelserne er hurtige

Prøv at opdele den eksisterende SQL i to dele og se, hvad der er udførelsestiderne for hver. Dette vil forhåbentlig give dig, hvilken del der er ansvarlig for langsommeligheden:

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

og del 2 (bemærk den indre sammenføjning her):

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

Jeg forventer, at del 2 ville tage længere tid. I dette tror jeg, at et indeks på både table_1 og table_2 på date_coll ville hjælpe.

Jeg tror ikke, det sammensatte indeks ville hjælpe overhovedet i dit valg.

Dette sagde, at det er svært at diagnosticere, hvorfor de tre tilstande tilsammen ville påvirke ydeevnen så dårligt. Det ser ud til at være relateret til din datadistribution. Ikke sikker på mySql, men i Oracle ville en statistiksamling på disse tabeller gøre en forskel.

Håber det hjælper.



  1. Regex for at fjerne sortlistede ord fra en sætning

  2. hvordan man henter dataene i JSP inde i tabel baseret på drop down valg

  3. Postgresql CASE-sætning - kan jeg bruge returværdien af ​​CASE i min SELECT?

  4. MySQL:Indlæser flere filer i en tabel