Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dlaczego klauzula „Top” może prowadzić do długotrwałych kosztów

Istnieją inne dyskusje dotyczące stackoverflow na ten sam temat (linki na dole). Jak zauważono w komentarzach powyżej, może to mieć coś wspólnego z indeksami i optymalizatorem, który pomyli się i użyje niewłaściwego.

Moją pierwszą myślą jest to, że wybierasz top serviceid z (wybierz *....), a optymalizator może mieć trudności ze spychaniem zapytania do zapytań wewnętrznych i korzystaniem z indeksu.

Rozważ przepisanie go jako

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

W twoim zapytaniu baza danych prawdopodobnie próbuje scalić wyniki i zwrócić je, a NASTĘPNIE ograniczyć ją do pierwszej dziesiątki w zewnętrznym zapytaniu. W powyższym zapytaniu baza danych będzie musiała zebrać tylko pierwsze 10 wyników, ponieważ wyniki są scalane, co oszczędza mnóstwo czasu. A jeśli servicerequestID jest indeksowany, na pewno go użyje. W twoim przykładzie zapytanie szuka kolumny servicerequestid w zestawie wyników, który został już zwrócony w wirtualnym, nieindeksowanym formacie.

Mam nadzieję, że to ma sens. Chociaż hipotetycznie optymalizator powinien przyjąć dowolny format, w którym umieszczamy SQL, i za każdym razem znaleźć najlepszy sposób zwracania wartości, prawda jest taka, że ​​sposób, w jaki składamy nasz SQL, może naprawdę wpłynąć na kolejność wykonywania określonych kroków na DB.

SELECT TOP działa wolno, niezależnie od ORDER BY

Dlaczego wykonywanie top(1) na indeksowanej kolumnie w SQL Server jest wolne?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie mogę uruchomić przeglądarki SQL Server

  2. Obetnij wszystkie tabele w bazie danych w SQL Server — SQL Server / TSQL Tutorial, część 55

  3. Przedstawiamy nową funkcję:Zawsze włączona grupa dostępności

  4. Jak dostroić wydajność SQL Server, Azure SQL Database i Amazon RDS

  5. MS SQL ON DELETE CASCADE wiele kluczy obcych wskazujących na tę samą tabelę?