sql >> Databasteknik >  >> RDS >> Mysql

Påverkar ordningen på villkoren i en WHERE-sats MySQL-prestanda?

Här är en demo visar ordningen för WHERE-satsvillkor kan göra skillnad på grund av kortslutning. Den kör följande frågor:

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

Den enda skillnaden mellan dessa är ordningen på operanderna i OR skick.

myslowfunction sover medvetet en sekund och har bieffekten att lägga till en post i en loggtabell varje gång den körs. Här är resultatet av det som loggas när de två frågorna körs:

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

Ovanstående visar att en långsam funktion exekveras fler gånger när den visas på vänster sida av en OR tillstånd när den andra operanden inte alltid är sann.

Så IMO svaret på frågan:

är "Ibland kan det göra."



  1. MySQL felaktig nyckelfil för tmp-tabell när man gör flera joins

  2. Använda MySQL relationsdatabaser på Fedora 20

  3. Hur man importerar en PostgreSQL-databas med phpPgAdmin

  4. Varför använder MySQL inte ett index för en större än jämförelse?