sql >> Database >  >> RDS >> Mysql

Heeft de volgorde van de voorwaarden in een WHERE-clausule invloed op de MySQL-prestaties?

Hier is een demo de volgorde van de WHERE-clausulevoorwaarden tonen can verschil maken door kortsluiting. Het voert de volgende zoekopdrachten uit:

-- 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;

Het enige verschil tussen deze is de volgorde van de operanden in de OR staat.

myslowfunction slaapt opzettelijk een seconde en heeft als neveneffect dat het elke keer dat het wordt uitgevoerd een item aan een logtabel toevoegt. Hier zijn de resultaten van wat er wordt vastgelegd bij het uitvoeren van de twee zoekopdrachten:

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

Het bovenstaande laat zien dat een langzame functie vaker wordt uitgevoerd wanneer deze aan de linkerkant van een OR . verschijnt voorwaarde wanneer de andere operand niet altijd waar is.

Dus IMO het antwoord op de vraag:

is "Soms kan het."



  1. Hoe ontsnap ik aan speciale tekens in MySQL?

  2. Lezen van bestand naar variabele - Bash Script take2

  3. Hoe willekeurig een rij selecteren, rekening houdend met een gewicht?

  4. Selecteer limiet voor unieke records met N rijen