sql >> Database >  >> RDS >> Sqlserver

Waarom levert een geparametriseerde query een veel langzamer queryplan op dan een niet-geparametriseerde query?

Het lijkt erop dat de queryplanner een beslissing heeft genomen in de letterlijke query die is gebaseerd op informatie die hij al heeft. Het zou statistieken hebben die het efficiënt kan opvragen op basis van de verspreiding van gegevens in uw specifieke letterlijke.

De geparametriseerde query heeft de query gekozen die volgens hem het meest geschikt is voor alle gegevens in uw tabel, wat u zult opmerken dat er veel geneste lussen zijn (prestatie =slecht).

Misschien kunt u proberen de hulpprogramma's voor databaseoptimalisatie op uw database uit te voeren om te zien of sommige indexen u hier kunnen helpen?

Specifiek in uw zoekopdracht, probeer dit:

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))

Maar ik zou op mijn hoede zijn om dit te doen zonder er zeker van te zijn dat de gegevens in deze query niet zullen veranderen en dat uw query op dit plan ALTIJD efficiënter zal zijn.



  1. Hoe Postgresql KOPIREN NAAR STDIN Met CSV doen op conflic doen update?

  2. Meerdere databaseverbindingen in Rails

  3. Controleer of de reeks bestaat in Postgres (plpgsql)

  4. Is er een manier om updates/verwijderingen uit te schakelen, maar toch triggers toe te staan ​​om ze uit te voeren?