Sargable - Sargable

În bazele de date relaționale , se spune că o condiție (sau predicat) dintr-o interogare poate fi amplificată dacă motorul SGBD poate profita de un index pentru a accelera execuția interogării. Termenul este derivat dintr-o contracție a Search ARGument ABLE .

O interogare faptul că nu a fi sargable este cunoscut ca un non-sargable interogare și are de obicei un efect negativ asupra timpului de interogare, astfel încât unul dintre pașii din interogare de optimizare este de a le converti să fie sargable. Efectul este similar cu căutarea unui anumit termen într-o carte care nu are index, începând de la pagina unu de fiecare dată, în loc să treacă la o listă de pagini specifice identificate într-un index.

Situația tipică care va face ca o interogare SQL să nu fie accesibilă este de a include în clauza WHERE o funcție care operează pe o valoare a coloanei. Clauza WHERE nu este singura clauză în care poate fi importantă accesibilitatea; poate avea, de asemenea, un efect asupra clauzelor ORDER BY, GROUP BY și HAVING. Clauza SELECT, pe de altă parte, poate conține expresii non-sargable fără a afecta negativ performanța.

  • Operatori mari: =, >, <, >=, <=, BETWEEN, LIKE, IS [NOT] NULL
  • Operatori mari care rareori îmbunătățesc performanța: <>, IN, OR, NOT IN, NOT LIKE

Exemplu simplu

WHERE clauzele care sunt sargabile au de obicei valori de câmp în stânga operatorului și valori scalare sau expresii în partea dreaptă a operatorului.

Nu se poate căuta:

SELECT *
FROM   myTable
WHERE  11.7 < SQRT(myIntField)

Acest lucru nu este accesibil deoarece myIntField este încorporat într-o funcție. Dacă ar fi disponibili indici pe myIntField, nu ar putea fi folosiți. În plus, ar fi apelat la fiecare înregistrare din myTable. SQRT()

Versiune Sargable:

SELECT *
FROM   myTable
WHERE  myIntField > 11.7 * 11.7

Acest lucru este accesibil, deoarece myIntField NU este conținut într-o funcție, ceea ce face ca orice index disponibil pe myIntField să fie potențial utilizabil. Mai mult, expresia este evaluată o singură dată, mai degrabă decât pentru fiecare înregistrare din tabel.

Vezi si

Referințe

  • Reglare performanță SQL de Peter Gulutzan, Trudy Pelzer (Addison Wesley, 2002) ISBN   0-201-79169-2 ( Capitolul 2, „Căutări” simple )
  • Microsoft SQL Server 2012 Internals de Kalen Delaney, Connor Cunningham, Jonathan Kehayias, Benjamin Nevarez, Paul S. Randal (O'Reily, 2013) ISBN   978-0-7356-5856-1 (Capitolul 11, Optimizatorul de interogare)

linkuri externe