Sisu
SQL-i kasutamise pidev väljakutse on määrata EXISTSi ja IN-operaatorite õige kasutamine. Mõlemad operaatorid saavad toota samu tulemusi, kuid mitte alati. Lisaks sellele arutatakse olulisel määral, kuidas iga operaator on optimeeritud kiiruse jaoks. Kasutajad peaksid mõistma iga operaatori erinevaid atribuute ja katsetama neid kahe sobiva kasutamise kindlaksmääramiseks.
Vaadake oma SQL-eesmärke, kui valite EXISTS või IN (Jupiterimages / Photos.com / Getty Images)
IN operaator
IN-operaator tagastab rea, kui tabeli väli väärtus vastab IN-väärtuste loendis olevale WHERE-olukorrale. Seda kasutatakse tavaliselt peamise päringu osana või koos allküsimusega.
Näide 1: WHERE table.field IN ('a', 'b', 'c') Näide 2: WHERE tabel. Väli IN (komplekti tagastav päring)
EXISTS operaator
EXISTSi operaator tagastab kõik suuremad read, kui subquery sisaldab ridu. Seda kasutatakse ainult koos subqueryga. Tagastatavad read määravad peamised päringud filtriga.
Näide: KUS EXISTS (komplekti tagastav päring)
Erinevus
IN-operaator ei saa NULL-väärtusi hinnata, nii et sellised jooned on alati valed ja neid ei tagastata erinevalt EXISTS-operaatorist, mis hindab ja tagastab NULL-väärtustega ridu.
Sarnasused
Nii EXISTS kui IN toetavad korrelatsiooniga ja korrelatsioonita alamküsimusi ning mõlemad võivad anda sarnaseid tulemusi. Kui need on omavahel seotud, rahuldavad nad alamküsitlusvälja põhipäringuvälja (nt. Print.id = subquery.id). Subquery hindab rida rida iga leitud juhtumi kohta. Sellisel juhul tagastavad IN ja EXISTS samad read sarnaste id-tingimuste alusel. Kui need on korrelatsioonita, töötlevad kaks operaatorit oma allküsimusi ja ühendavad seejärel peamise päringu tulemused.
Toimivus
Toimivuse määrab andmebaasi optimeerija ja teostatud koodi täitmiseks kasutatav plaan. EXISTS ja IN puhul saab optimeerija valida erinevaid teid. Oracle'is pole NOT EXISTS tavaliselt kiirem kui NOT IN. Lõpuks on lühima tee sorteerimiseks vajalikud katsed ja vead, sõltuvalt kasutatavast andmebaasist ja versioonist. Kindlasti kasutage operaatorit, kes tagab esimesed õiged tulemused, ja proovige seejärel asendada operaatorid, et näha, mis on kõige kiirem.