Saya memiliki database tempat saya menggunakan TVFs sebaris (fungsi nilai tabel) alih-alih tampilan. Sebagai contoh, saya mungkin memiliki dua tabel yang disebut [model mobil] dan [produsen mobil] yang saya gabungkan bersama di dalam TVF [fnCarBrands].
TVF ini kemudian dipanggil oleh TVF lain untuk melakukan pemrosesan dan pelaporan lebih lanjut. Jadi saya mungkin mengambil fungsi saya [fnCarBrands] dan bergabung ke tabel [Tahun Pembelian] untuk membentuk fungsi [fnCarBrandHistory]. Dan seterusnya untuk beberapa lapisan TVF.
Saya mungkin bisa mendapatkan fungsionalitas yang sama menggunakan tampilan, karena TVFs sebaris saya benar-benar hanya gabungan dari tabel dan TVFs lainnya.
Bagaimana kinerja TVFs inline yang ditulis dengan cara ini dibandingkan dengan pandangan?
sumber
Jawaban:
Pengoptimal kueri memperlakukan fungsi nilai tabel inline persis seperti tampilan:
Sebuah fungsi meja-nilai multi-pernyataan dijalankan lebih seperti prosedur yang tersimpan. Mereka biasanya harus dieksekusi beberapa kali, daripada dilipat ke dalam kueri utama:
sumber
Anda harus membuat tampilan yang mirip dengan fungsi dan meminta setiap melihat pada rencana eksekusi untuk melihat apa yang terjadi dengan masing-masing.
sumber
Tentu saja membuat tampilan yang memanggil tampilan lain juga merupakan pembunuh kinerja. Jangan menuruni rute itu. Tulis pertanyaan yang Anda butuhkan dan jangan gunakan TVF atau tampilan jika Anda menginginkan kinerja. Ini adalah layering yang menciptakan masalah, ini adalah hampir selalu hal yang buruk untuk dilakukan ketika query database dan Anda dapat dengan cepat berakhir memukul batas jumlah meja Anda dapat referensi juga, terutama karena Anda sering berakhir referensi tabel yang sama di berbagai lapisan. Lebih lanjut, sementara ini sepertinya akan lebih mudah untuk dipertahankan, tidak. Coba debugging atau menambahkan kolom karena persyaratan baru ketika lapisan yang perlu Anda perbaiki ada di bagian bawah.
sumber