Ada diskusi stackoverflow lain tentang topik yang sama ini (tautan di bawah). Seperti disebutkan dalam komentar di atas, ini mungkin ada hubungannya dengan indeks dan pengoptimal menjadi bingung dan menggunakan yang salah.
Pikiran pertama saya adalah bahwa Anda melakukan serviceid atas pilih dari (pilih *....) dan pengoptimal mungkin mengalami kesulitan mendorong kueri ke kueri dalam dan memanfaatkan indeks.
Pertimbangkan untuk menulis ulang sebagai
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
Dalam kueri Anda, database mungkin mencoba menggabungkan hasil dan mengembalikannya dan KEMUDIAN membatasinya ke 10 teratas di kueri luar. Dalam kueri di atas, basis data hanya perlu mengumpulkan 10 hasil pertama saat hasil digabungkan, menghemat banyak waktu. Dan jika servicerequestID diindeks, pasti akan menggunakannya. Dalam contoh Anda, kueri mencari kolom servicerequestid dalam kumpulan hasil yang telah dikembalikan dalam format virtual yang tidak diindeks.
Harapan yang masuk akal. Sementara secara hipotetis pengoptimal seharusnya mengambil format apa pun yang kami masukkan SQL dan mencari cara terbaik untuk mengembalikan nilai setiap saat, kenyataannya adalah cara kami menyatukan SQL kami benar-benar dapat memengaruhi urutan langkah-langkah tertentu yang dilakukan pada DB.
SELECT TOP lambat, terlepas dari ORDER BY
Mengapa melakukan top(1) pada kolom yang diindeks di SQL Server lambat?