Ya jika Anda:
- menjalankan SQL Server 2014 atau yang lebih baru; dan
- dapat menjalankan kueri dengan tanda jejak 176 aktif; dan
- kolom yang dihitung adalah
PERSISTED
Secara khusus, setidaknya diperlukan versi berikut :
- Pembaruan Kumulatif 2 untuk SQL Server 2016 SP1
- Pembaruan kumulatif 4 untuk SQL Server 2016 RTM
- Pembaruan kumulatif 6 untuk SQL Server 2014 SP2
TETAPI untuk menghindari bug (referensi untuk 2014 , dan untuk 2016 dan 2017 ) yang diperkenalkan di perbaikan itu, sebaliknya berlaku:
Bendera jejak efektif sebagai –T
opsi start-up , baik menggunakan lingkup global dan sesi DBCC TRACEON
, dan per kueri dengan OPTION (QUERYTRACEON)
atau panduan paket.
Bendera jejak 176 mencegah perluasan kolom komputer tetap.
Pemuatan metadata awal yang dilakukan saat kompilasi kueri menghadirkan semua kolom, bukan hanya yang direferensikan secara langsung. Ini membuat semua definisi kolom yang dihitung tersedia untuk pencocokan, yang umumnya merupakan hal yang baik.
Sebagai efek samping yang tidak menguntungkan, jika salah satu kolom yang dimuat (dihitung) menggunakan fungsi skalar yang ditentukan pengguna, keberadaannya menonaktifkan paralelisme untuk seluruh kueri, bahkan ketika kolom yang dikomputasi tidak benar-benar digunakan .
Bendera jejak 176 membantu dengan ini, jika kolom tetap ada, dengan tidak memuat definisi (karena ekspansi dilewati). Dengan cara ini, fungsi skalar yang ditentukan pengguna tidak pernah ada di pohon permintaan kompilasi, sehingga paralelisme tidak dinonaktifkan.
Kelemahan utama dari bendera jejak 176 (selain hanya didokumentasikan dengan ringan) adalah bahwa ia juga mencegah pencocokan ekspresi kueri ke kolom yang dihitung tetap: Jika kueri berisi ekspresi yang cocok dengan kolom yang dihitung tetap, jejak bendera 176 akan mencegah ekspresi diganti oleh referensi ke kolom yang dihitung.
Untuk detail lebih lanjut, lihat artikel SQLPerformance.com saya, Kolom Dihitung yang Ditetap dengan Benar .
Karena pertanyaan menyebutkan XML, sebagai alternatif untuk mempromosikan nilai menggunakan kolom yang dikomputasi dan fungsi skalar, Anda juga dapat melihat menggunakan Indeks XML Selektif, seperti yang Anda tulis dalam Indeks XML Selektif: Tidak Buruk Sama sekali .