Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Защо параметризирана заявка произвежда значително по-бавен план за заявка в сравнение с непараметризирана заявка

Изглежда, че плановникът на заявки е взел решение в буквалната заявка, което се основава на информация, която той вече има. Ще има статистически данни, които може ефективно да запитва въз основа на разпространението на данните, дадени във вашия конкретен литерал.

Параметризираната заявка е избрала заявката, която смята, че е най-справедлива за всички данни във вашата таблица, което ще забележите, че е много вложени цикли (производителност =лоша).

Може би бихте могли да опитате да стартирате инструментите за оптимизиране на базата данни във вашата база данни, за да видите дали някои индекси могат да ви помогнат тук?

По-конкретно във вашата заявка, опитайте това:

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

Но бих бил предпазлив да направя това, без да съм сигурен, че данните, съдържащи се в тази заявка, няма да се променят и че заявката ви в този план ВИНАГИ ще бъде по-ефективна.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как CAST() работи в SQL Server

  2. Как да зададете име на първичен ключ в EF-Code-First

  3. Проактивни проверки на състоянието на SQL Server, част 5:Статистика за изчакване

  4. datetime срещу datetime2 в SQL Server:Каква е разликата?

  5. Трябва ли да използвам !=или <> за не е равно в T-SQL?