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

Параметърът не работи толкова добре, колкото твърдото кодиране на стойността

РЕДАКТИРАНЕ НА РЕЗЮМЕ По молба от Damien_The_Unbeliever

Целта е да получите най-добрата/най-добрата информация за стойността на променливата в SQL ПРЕДИ да бъде създаден планът, обикновено това се прави чрез надушване на параметри. Може да има причина, поради която в този случай надушването на параметри е било „забранено“. Без да видим по-добро представяне на действителния код, не можем наистина да кажем какво е решението или защо проблемът съществува. Опитайте нещата по-долу, за да принудите засегнатите райони да генерират планове, като използват действителни стойности.

*ДЪЛГА ВЕРСИЯ С ПОВЕЧЕ ПОДРОБНОСТИ *

Това ли е вашата действителна съхранена процедура? Имате ли стойности по подразбиране за вашите параметри? Ако е така, какви са те?

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

Ако някой друг е написал този sproc - той може умишлено да е "забранил" снифирането на параметри с локалните променливи по някаква причина. Бизнес правилата може да изискват тези променливи структури.

Целта е да получите най-добрата/най-добрата информация за стойността на променливата в SQL ПРЕДИ да бъде създаден планът и обикновено това се прави чрез надушване на параметри. Но има неща, които могат да го накарат да повлияе негативно на производителността и това може да е причината да е „деактивиран“. Все още изглежда, че планът се създава с нетипични стойности за параметрите или все още няма достатъчно информация - използвайки надушване на параметри или не.

Опитайте да извикате заявката вътре в sproc с Използвайте sp_executesql, за да изпълните засегнатите заявки, принуждавайки я да генерира план за тази област с действителните променливи и вижте дали е по-добре. Това може да е вашето решение, ако трябва да имате този вид нередовна стойност на параметър - създайте съхранени процедури, които изпълняват засегнатите части и ги извикайте по-късно от съхранената процедура - след като променливата е получила типична стойност.

Без да се види по-добро представяне на действителния код, е трудно да се види какъв е проблемът. Надяваме се, че тази информация ще помогне -



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Включване на SQL Server в разпределена XA транзакция

  2. Заменете колоната за самоличност от int на bigint

  3. Как да коригирате „Отказът ALTER TABLE SWITCH не е успешен“

  4. вмъкнете XML файл в SQL чрез SSIS

  5. Как да изберете всеки ред, където стойността на колоната НЕ е различима