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

Påvirker rækkefølgen af ​​betingelserne i en WHERE-klausul MySQL-ydeevne?

Her er en demo viser rækkefølgen af ​​WHERE-sætningsbetingelser kan gøre en forskel på grund af kortslutning. Den kører følgende forespørgsler:

-- 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 eneste forskel mellem disse er rækkefølgen af ​​operander i OR tilstand.

myslowfunction sover bevidst et sekund og har den bivirkning, at den tilføjer en post til en logtabel, hver gang den køres. Her er resultaterne af, hvad der logges, når de to forespørgsler køres:

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

Ovenstående viser, at en langsom funktion udføres flere gange, når den vises på venstre side af en OR tilstand, når den anden operand ikke altid er sand.

Så IMO svaret på spørgsmålet:

er "Nogle gange kan det gøre."



  1. Udforskning af de forskellige begrænsninger i SQL Server

  2. pgAdmin Alternativer - PostgreSQL Database Management GUI ClusterControl

  3. søg data fra html-input i mysql

  4. 8 måder at tilføje mikrosekunder til en Datetime-værdi i MariaDB