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

Ovlivňuje pořadí podmínek v klauzuli WHERE výkon MySQL?

Zde je ukázka zobrazující pořadí podmínek klauzule WHERE mohou způsobit rozdíl v důsledku zkratování. Spouští následující dotazy:

-- query #1
SELECT myint FROM mytable WHERE myint >= 3 OR myslowfunction('query #1', myint) = 1;

-- query #2
SELECT myint FROM mytable WHERE myslowfunction('query #2', myint) = 1 OR myint >= 3;

Jediný rozdíl mezi nimi je pořadí operandů v OR podmínka.

myslowfunction záměrně na sekundu spí a má vedlejší účinek přidání položky do tabulky protokolu při každém spuštění. Zde jsou výsledky toho, co je protokolováno při spuštění dvou dotazů:

myslowfunction called for query #1 with value 1
myslowfunction called for query #1 with value 2
myslowfunction called for query #2 with value 1
myslowfunction called for query #2 with value 2
myslowfunction called for query #2 with value 3
myslowfunction called for query #2 with value 4

Výše uvedené ukazuje, že pomalá funkce se provede vícekrát, když se objeví na levé straně OR stav, kdy druhý operand není vždy pravdivý.

Takže IMO odpověď na otázku:

je "Někdy to může udělat."



  1. Jak programově nastavit max_connections v MySQL

  2. Vyberte všechna data mezi dvěma daty bez použití tabulky (vygenerujte seznam dat)

  3. MySQL Select JOIN 3 Tables

  4. Jak najít název omezení v PostgreSQL