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

Mengapa UDF jauh lebih lambat daripada subquery?

UDF adalah kotak hitam untuk pengoptimal kueri sehingga dijalankan untuk setiap baris. Anda sedang melakukan kursor baris demi baris. Untuk setiap baris dalam aset, cari id tiga kali di tabel lain. Ini terjadi saat Anda menggunakan UDF skalar atau multi-pernyataan (UDF sebaris hanyalah makro yang diperluas ke kueri luar)

Salah satu dari banyak artikel tentang masalah ini adalah "Fungsi skalar, inlining, dan performa:Judul yang menghibur untuk postingan yang membosankan".

Sub-kueri dapat dioptimalkan untuk menghubungkan dan menghindari operasi baris demi baris.

Yang benar-benar Anda inginkan adalah ini:

SELECT
   uc.id AS creator,
   uu.id AS updater,
   uo.id AS owner,
   a.[name]
FROM
    asset a
    JOIN
    user uc ON uc.user_pk = a.created_by
    JOIN
    user uu ON uu.user_pk = a.updated_by
    JOIN
    user uo ON uo.user_pk = a.owned_by

Perbarui Februari 2019

SQL Server 2019 mulai memperbaiki masalah ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya bisa menggunakan kumpulan koneksi mssql tunggal di beberapa rute dalam aplikasi web Express 4?

  2. DATEDIFF() Contoh di SQL Server

  3. Variabel peka huruf besar/kecil di SQL Server

  4. Login SQL Server Lintas Domain Menggunakan Otentikasi Windows

  5. Apa yang setara dengan 'jelaskan tabel' di SQL Server?