/ / Prečo by sa presne rovnaký výsledok dotazu SQL s iným plánom vykonávania vykonal pomocou procedúry sp_executeSQL? - sql-server, tsql, sql-execution-plán, sp-executesql

Prečo by sa presne rovnaký výsledok dotazu SQL s iným plánom vykonávania vykonal pomocou procedúry sp_executeSQL? - sql-server, tsql, sql-execution-plán, sp-executesql

Ako uvádza názov, nerozumiem, prečo by sp_executeSQL vygeneroval úplne iný plán spúšťania než spustenie dotazu zo Sql Management Studio.

Moja otázka bude trvať 3 sekundy, keď sa spustí z SQL manažmentu Studio, kde ako dotaz spustený v manažérskom štúdiu prostredníctvom sp_executeSQL bude trvať 5 minút.

Aktualizoval som štatistiky a prehľadoval indexy, ale skutočnosť zostala v mojej hlave, že plán spúšťania z sp_executeSQL bol FAR horší ako spustenie sql priamo z môjho manažmentového štúdia.

Takže tu je moja otázka: Prečo by plány popravy líšili toľko medzi spustením dotazu týmito dvomi rôznymi spôsobmi?

Vďaka

odpovede:

5 pre odpoveď č. 1

vidieť toto

v podstate, môže existovať viacero [vykonávacích] plánov pre ten istý postup


2 pre odpoveď č. 2

Zváž toto. Keď vykonáte uloženú procedúru, tento postup bude mať vlastný plán vykonávania. Keď spustíte príkaz dotazu, opäť bude mať vlastný plán vykonávania. Teraz, keď používate sp_executeSQL, používate túto uloženú procedúru na dynamické vykonanie dotazu. Takže v podstate jeho plán realizácie je kombinácia sp_executeSQL a vášho dotazu.