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)