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

Защо тази (некорелирана) подзаявка причинява такива проблеми?

Моят опит показва, че колкото по-сложни стават вашите заявки, толкова по-малко способен е SQL оптимизаторът да създава ловки планове. Тук имате 16 съединения, някои или повечето са външни съединения, имате поне една подзаявка... добавете достатъчно индекси, мощности, изгледи, външни приложения и кой знае какво още и никой, дори и Microsoft инженери*, могат да измислят рутинни процедури, които равномерно и редовно ще генерират най-оптималните планове.

Това, което описахте, преживях многократно - промените едно просто нещо в объркана заявка и всичко става с един порядък по-бързо (или, скърцане със зъби, по-бавно). Нямам метод за определяне кога сложното е твърде сложно, това е по-скоро чувство, отколкото нещо друго. Моето основно правило е, ако изглежда твърде дълго или твърде сложно, опростете, където можете – като например предварително избраната от вас единична вложена стойност или отделяне на част от заявката, отколкото винаги работи бързо с малък набор от резултати и първо го изпълнява и съхранява резултатите във временна таблица.

( * Моля, обърнете внимание, че това е лек сарксам)



  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 2008 кръстосана производителност на база данни на една и съща физическа машина и един и същи сървърен екземпляр

  2. Неемоционален логически поглед към конвенциите за именуване на SQL Server

  3. Защо да изберете клауза Top може да доведе до дългосрочни разходи

  4. SQL малка таблица, разпределена в паметта

  5. Как бързо да редактирате стойности в таблицата в SQL Server Management Studio?