Dalam tutorial tertentu yang saya baca penulis memfilter sys.indexes
berdasarkan predikat index_id < 256000
. Apa yang dicapai ini?
11
Dalam tutorial tertentu yang saya baca penulis memfilter sys.indexes
berdasarkan predikat index_id < 256000
. Apa yang dicapai ini?
sys.sysindexkeys
sys.selective_xml_index_paths
,sys.xml_indexes
,sys.sysindexes
tapi saya kira ini akan hanya mendapatkan update jika angka ajaib tidak berlaku lagi.Jawaban:
Ini didasarkan pada kesalahpahaman bahwa indeks XML saat ini adalah satu-satunya jenis yang dapat memiliki skema id>> 256000 (setidaknya berdasarkan pengamatan mereka; skema ini tidak didokumentasikan AFAIK, jadi bahkan tidak yakin apakah itu disengaja). Mungkin bagus di versi saat ini, tetapi siapa yang tahu jenis indeks apa yang akan ditambahkan selanjutnya dan di mana skema id-nya akan dimulai? Jika Anda ingin mengecualikan indeks XML, Anda sekarang juga mengecualikan sesuatu yang lain. Indeks spasial, misalnya, tampaknya dimulai dengan id = 384000. Jika kueri di atas berniat untuk memasukkan indeks spasial tetapi bukan indeks XML, mereka akan terkejut.
Filter yang jauh lebih baik adalah:
... atau bahkan lebih baik, karena itu mendokumentasikan diri ...
Dan sekarang ketika Anda ingin juga mengecualikan, katakanlah, indeks spasial, permintaan Anda berubah menjadi ...
... daripada harus mencari tahu kisaran numerik apa yang mungkin ditempati oleh nilai id untuk indeks spasial (atau tidak). Semoga beruntung dengan itu.
Ini cukup jelas didokumentasikan dalam sys.indexes (Transact-SQL) . Saya tidak melihat referensi ke angka ajaib ini dan saya sangat menyarankan Anda mengarahkan penulis tutorial Anda di sini sehingga mereka dapat melihat bahwa angka ajaib ini bukanlah sesuatu yang harus mereka andalkan (apalagi mengajar orang lain untuk mengandalkan).
sumber
index_id
. Terutama karena data yang lebih akurat untuk menentukan jenis duduk tepat di sebelahnya ... secara harfiah.Menurut buku "Microsoft SQL Server 2012 Internal" Oleh Kalen Delaney, Craig Freeman, index_id indeks XML mulai penomoran dengan 256000. Jadi untuk mendapatkan semua jenis informasi indeks (query sys.indexes) tetapi melewatkan indeks XML Anda dapat menempatkan filter seperti itu.
Set hasil yang sama dapat dicapai dengan menempatkan filter pada kolom tipe sys.indexes. Untuk tipe indeks XML, ketik = 3.
atau
Kolom type_desc juga bisa digunakan.
sumber