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

Функция с таблична стойност, която убива производителността на моята заявка

Връщането на таблична променлива ще я направи функция с таблични стойности с множество изрази и може да бъде лошо за производителността поради факта, че се третира като таблица, освен че няма налични статистики, на които SQL Server да базира добър план за изпълнение - така че ще оцени функцията като връщаща много малък брой редове. Ако върне по-голям брой редове, тогава генерираният план може да е много по-малко от оптималния.

Докато връщането само на SELECT го прави вградена функция със стойност на таблица - мислете за това повече като за гледка. В този случай действителните базови таблици се въвеждат в основната заявка и може да се генерира по-добър план за изпълнение въз основа на правилна статистика. Ще забележите, че в този случай в плана за изпълнение НЯМА да има споменаване на функцията изобщо, тъй като по същество то просто е обединило функцията в основната заявка.

Има страхотна препратка към него на MSDN от инженери на CSS SQL Server включително (цитат):



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Име на таблица като променлива

  2. Как да преобразувам формата на системната дата в дд/мм/гг в SQL Server 2008 R2?

  3. Разликата във времето в SQL между две дати води до hh:mm:ss

  4. Crystal Report показва HTML текст, но водещите символи не се показват. Защо?

  5. Неявно преобразуване на изходния формат на SSIS за дата и час