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

Vyberte dotaz se třemi, kde jsou podmínky pomalé, ale stejný dotaz s libovolnou kombinací dvou ze tří, kde jsou podmínky rychlé

Zkuste rozdělit existující SQL na dvě části a zjistěte, jaké jsou doby provádění pro každou z nich. To by vám, doufejme, poskytlo část, která je zodpovědná za pomalost:

část 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

a část 2 (všimněte si vnitřního spojení zde):

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

Očekávám, že druhý díl bude trvat déle. V tomto si myslím, že by pomohl index na table_1 a table_2 na date_coll.

Nemyslím si, že by vám složený index při výběru vůbec pomohl.

To znamená, že je těžké diagnostikovat, proč by tyto tři podmínky společně ovlivnily výkon tak špatně. Zdá se, že to souvisí s vaší distribucí dat. Nejsem si jistý mySql, ale v Oracle by shromažďování statistik v těchto tabulkách znamenalo rozdíl.

Doufám, že to pomůže.



  1. Jak funguje funkce CHARINDEX() v SQL Server (T-SQL)

  2. Nástroj pro ověřování clusteru generující velké množství souborů xml na souborovém systému „/u01“.

  3. Součtový dotaz Mysql vrací nesprávný výsledek při použití více spojení

  4. Příkaz CASE v klauzuli WHERE v SQL Server 2008