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

Mengapa subquery (tidak berkorelasi) ini menyebabkan masalah seperti itu?

Menurut pengalaman saya, semakin kompleks kueri Anda, semakin kecil kemampuan pengoptimal SQL untuk membuat rencana cekatan. Di sini Anda memiliki 16 gabungan, beberapa atau sebagian besar adalah gabungan luar, Anda memiliki setidaknya satu subkueri... memasukkan cukup indeks, kardinalitas, tampilan, penerapan luar, dan siapa yang tahu apa lagi dan tidak seorang pun, bahkan Microsoft engineer*, dapat mengetahui rutinitas yang akan menghasilkan rencana yang paling optimal secara seragam dan teratur.

Apa yang Anda jelaskan, saya alami berkali-kali -- ubah satu hal sederhana dalam kueri yang berantakan dan semuanya menjadi urutan besarnya lebih cepat (atau, menggertakkan gigi, lebih lambat). Saya tidak memiliki metode untuk menentukan kapan kompleks terlalu kompleks, itu lebih merupakan perasaan daripada apa pun. Aturan umum saya adalah, jika terlihat terlalu panjang atau terlalu rumit, sederhanakan di mana Anda bisa--seperti nilai bersarang tunggal yang Anda pilih sebelumnya, atau memecah bagian dari kueri daripada selalu jalankan cepat dengan kumpulan hasil kecil, dan jalankan terlebih dahulu dan simpan hasilnya dalam tabel sementara.

(* Harap dicatat bahwa ini adalah sarkasme ringan)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. InvalidCastException berkala dan Server gagal melanjutkan transaksi dengan Linq

  2. melewatkan operan sebagai parameter sql

  3. Kembalikan ID yang terakhir dimasukkan tanpa menggunakan kueri kedua

  4. Manakah cara terbaik untuk melakukan pagination di SQL Server?

  5. kehilangan skala saat melakukan perhitungan