sql >> Database teknologi >  >> RDS >> Sqlserver

Hvorfor producerer en parameteriseret forespørgsel meget langsommere forespørgselsplan i forhold til ikke-parameteriseret forespørgsel

Det ser ud til, at forespørgselsplanlæggeren har truffet en beslutning i den bogstavelige forespørgsel, som er baseret på oplysninger, som den allerede har. Det ville have statistikker, som det kan forespørge effektivt på baseret på spredningen af ​​data givet i dit specifikke bogstav.

Den parametriserede forespørgsel har valgt den forespørgsel, som den mener er mest retfærdig for alle data i din tabel, som du vil bemærke er mange indlejrede loops (ydeevne =dårlig).

Måske du kan prøve at køre databaseoptimeringsværktøjerne på din database for at se, om nogle indekser kan hjælpe dig her?

Specifikt i din forespørgsel, prøv dette:

declare @p0 int
set @p0 = 1000
select *
from foo
join bar on bar.x = foo.x
join baz on baz.y = foo.y
where foo.x = @p0
OPTION ( OPTIMIZE FOR (@p0 = 1000))

Men jeg vil være forsigtig med at gøre dette uden at være sikker på, at dataene i denne forespørgsel ikke vil ændre sig, og at din forespørgsel på denne plan ALTID vil være mere effektiv.



  1. Relationel algebra

  2. SQL mindre end eller lig med (=) operatør for begyndere

  3. tsql returnerer en tabel fra en funktion eller butiksprocedure

  4. Om pglogisk ydeevne