SQL Server-optimalisatie: functie in SELECT berekend vóór of na WHERE-clausule?

Ik vroeg me af of ik in SQL Server in een verklaring als deze:

SELECT A.Field1, dbo.someFunction(A.IdentifierID) As Field 
FROM Table A WHERE A.IdentifierID = 1000

Zal het someFunction voor alle rijen in de tabel noemen, of zal het het een keer noemen?

Bedankt!

0
probeer het en kijk wat sneller is!
toegevoegd de auteur vlad, de bron

5 antwoord

Het zal voor elke rij resultaat worden gebruikt

3
toegevoegd

het aantal oproepen hangt af van de resulterende rijen, d.w.z. als de uitvoer van de query 100 rij de 100 keer zal worden aangeroepen, niet voor alle rijen in de tabel

maar als het in de where-component was, wordt het voor elke rij geëvalueerd

1
toegevoegd

Zoals Vlad opmerkte, zou je het moeten proberen en zien. Er zijn natuurlijk twee opties:

  1. Het zou het een keer kunnen noemen, wetende dat IdentifierID altijd 1000 is.

maar dat is misschien niet het goede ...

  1. Het zou het voor elke rij kunnen noemen - misschien heeft de functie neveneffecten?

Ik vermoed sterk # 2.

0
toegevoegd

Zal het voor elke rij noemen, maar aangezien je een specifieke rij selecteert (of zo lijkt het), wordt deze eenmaal genoemd in je voorbeeld.

0
toegevoegd

Compliant SQL-servers moeten verschijnen alsof ze de WHERE-component toepassen voordat ze de SELECT-component toepassen. Het moet dus verschijnen om de functie maximaal een keer te evalueren voor elke rij die voldoet aan WHERE A.IdentifierID = 1000 .

Maar databasemotoren kunnen gratis worden geoptimaliseerd, maar ze houden ervan, zolang ze dezelfde resultaten opleveren als de normen vereisen. In uw geval hoeft u de functie dus maar één keer te evalueren, omdat u een enkel ID-nummer selecteert.

0
toegevoegd