Dari msdn :
Tidak seperti tabel turunan, CTE bisa menjadi rujukan sendiri dan dapat direferensikan beberapa kali dalam kueri yang sama.
Saya menggunakan CTE cukup banyak, tetapi saya tidak pernah berpikir mendalam tentang manfaat menggunakannya.
Jika saya mereferensikan CTE beberapa kali dalam permintaan yang sama:
- Apakah ada manfaat kinerja?
- Jika saya melakukan self join, apakah SQL Server akan memindai tabel target dua kali?
sql-server
cte
Royi Namir
sumber
sumber
Jawaban:
Sebagai aturan, CTE tidak akan pernah meningkatkan kinerja .
CTE pada dasarnya adalah pandangan sekali pakai. Tidak ada statistik tambahan yang disimpan, tidak ada indeks, dll. Ini berfungsi sebagai singkatan untuk subquery.
Menurut pendapat saya mereka dapat digunakan dengan mudah MUDAH (saya melihat banyak kode yang terlalu sering digunakan dalam pekerjaan saya). Beberapa jawaban yang baik ada di sini, tetapi jika Anda perlu merujuk ke sesuatu lebih dari sekali, atau lebih dari beberapa ratus ribu baris, masukkan ke dalam
#temp
tabel dan gantilah.sumber
CTE
adalah pilihan yang buruk karena hasilnya dibuang setelah permintaan pertama.Satu tempat selain rekursi di mana saya menemukan CTE sangat berguna adalah ketika membuat kueri pelaporan yang kompleks. Saya menggunakan serangkaian CTE untuk mendapatkan potongan data yang saya butuhkan dan kemudian menggabungkannya di pilih terakhir. Saya menemukan mereka lebih mudah untuk mempertahankan daripada melakukan hal yang sama dengan banyak tabel turunan atau 20 bergabung dan saya menemukan bahwa saya dapat lebih yakin bahwa itu mengembalikan data yang benar tanpa efek dari beberapa catatan karena satu-banyak hubungan di semua bergabung berbeda. Biarkan saya memberi contoh cepat:
Jadi dengan memisahkan potongan informasi yang berbeda yang Anda inginkan, Anda dapat memeriksa setiap bagian secara terpisah (menggunakan pilihan yang dikomentari, dengan membatalkan komentar masing-masing secara individual dan hanya berjalan sejauh yang dipilih) dan jika Anda perlu melakukan perubahan pada pengeluaran perhitungan (dalam contoh ini), lebih mudah ditemukan daripada ketika mereka dicampur bersama menjadi satu permintaan besar. Tentu saja pertanyaan pelaporan aktual yang saya gunakan untuk ini pada umumnya jauh lebih rumit daripada contohnya.
sumber
Seperti biasa itu tergantung tetapi ada kasus di mana kinerja sangat meningkat. Saya melihatnya dengan pernyataan INSERT INTO SELECT di mana Anda menggunakan CTE untuk pilih dan kemudian menggunakannya di INSERT INTO. Ini mungkin ada hubungannya dengan RCSI yang diaktifkan untuk database tetapi untuk saat-saat ketika sangat sedikit yang dipilih dapat membantu sedikit.
sumber