sql >> Databasteknik >  >> RDS >> Sqlserver

Varför producerar en parameteriserad fråga mycket långsammare frågeplan jämfört med icke-parameteriserad fråga

Det verkar som att frågeplaneraren har fattat ett beslut i den bokstavliga frågan som är baserat på information som den redan har. Den skulle ha statistik som den kan söka effektivt baserat på spridningen av data som ges i din specifika bokstav.

Den parameteriserade frågan har valt den fråga som den anser är rättvisast för all data i din tabell, vilket du kommer att märka är många kapslade loopar (prestanda =dåligt).

Du kanske kan försöka köra databasoptimeringsverktygen på din databas för att se om några index kan hjälpa dig här?

Specifikt i din fråga, prova detta:

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 jag skulle vara försiktig med att göra detta utan att vara säker på att informationen i den här frågan inte kommer att förändras och att din fråga om den här planen ALLTID kommer att vara mer effektiv.



  1. Hur man visar nollvärden när man kör frågor i psql (PostgreSQL)

  2. MySQL SIGN() Funktion – Ta reda på om ett tal är positivt eller negativt i MySQL

  3. Hur kan jag komma runt MySQL Errcode 13 med SELECT INTO OUTFILE?

  4. SQL Fyll i tabell med slumpmässiga data