Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mengapa memilih klausa Top dapat menyebabkan biaya waktu yang lama?

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?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menggunakan Wizard Impor/Ekspor Di SQL Server - Tutorial SQL Server / TSQL Bagian 104

  2. Temukan nilai maksimal dan tampilkan nilai yang sesuai dari bidang yang berbeda di server SQL

  3. Setara terbaik untuk IsInteger di SQL Server

  4. Solusi DevOps untuk Otomatisasi Pengembangan Basis Data

  5. Cara Menonaktifkan CDC Pada Set Tabel ATAU Menonaktifkan Semua Tabel Dalam Database di SQL Server - Tutorial SQL Server