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

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

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

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

Помислете да го пренапишете като

select top 10 ServiceRequestID  
from  big_table_1
inner join big_table_2 cap2
on cap1.servicerequestid = cap2.customerreferencenumber
and big_table_1.statusid = 2

Във вашата заявка базата данни вероятно се опитва да обедини резултатите и да ги върне и ТОГАВА да я ограничи до първите 10 във външната заявка. В горната заявка базата данни ще трябва да събере само първите 10 резултата, тъй като резултатите се обединяват, спестявайки много време. И ако servicerequestID е индексиран, той със сигурност ще го използва. Във вашия пример заявката търси колоната servicerequestid в набор от резултати, който вече е върнат във виртуален, неиндексиран формат.

Дано има смисъл. Докато хипотетично оптимизаторът трябва да вземе какъвто и формат да поставим SQL и да измисли най-добрия начин да връща стойности всеки път, истината е, че начинът, по който събираме нашия SQL заедно, може наистина да повлияе на реда, в който се извършват определени стъпки върху DB.

SELECT TOP е бавен, независимо от ORDER BY

Защо правенето на top(1) на индексирана колона в 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. Как да автоматизирате събирането на данни за растежа на базата данни на SQL Server

  2. Най-добрият начин да получите PK Guid за вмъкнат ред

  3. Как да вмъкнете стойности в колона IDENTITY в SQL Server

  4. Как да създадете таблица с помощта на заявка за избор в SQL Server?

  5. Как да създадете ограничение на външния ключ с ON DELETE CASCADE в SQL Server - SQL Server / TSQL урок, част 80