Saya memiliki hak istimewa mengelola tabel OLAP dipartisi besar. Saat meninjau tabel ini, saya perhatikan salah satu indeks tidak selaras dengan skema partisi. Karena penulis tidak tersedia dan pencarian Google yang dibuat dengan hati-hati belum memberikan hasil yang bermanfaat, saya tidak yakin apakah ini disengaja atau tidak disengaja.
Apakah ada alasan untuk tidak menyelaraskan partisi indeks pada SQL Server 2008?
Jawaban:
Keuntungan utama dari tidak partisi (non-unik) indeks pada objek dasar dipartisi adalah bahwa ia bekerja di sekitar keterbatasan query optimizer lama terkait dengan permintaan data memerintahkan seperti
MIN
,MAX
atauTOP (n)
query.Pada indeks dipartisi, optimizer umumnya tidak dapat menerjemahkan
MIN
,,MAX
atauTOP (n)
ke operasi yang sama per partisi , diikuti oleh agregat global akhir atas agregat parsial per-partisi. Pengoptimal memilih rencana eksekusi yang memindai semua partisi indeks. Pengecualian untuk ini adalah kasus tunggal di mana operasi agregat atau teratas ditentukan di atas kolom partisi.Saya harus menyebutkan bahwa ada juga alasan yang sangat bagus untuk tidak memiliki indeks yang tidak selaras. Memilih untuk menggunakan indeks yang tidak selaras harus menjadi pilihan yang sangat informatif. Saya telah melakukannya sendiri (jarang) di masa lalu, tetapi dalam keadaan yang sangat spesifik di mana manfaatnya jelas melebihi biaya, atau tidak ada alternatif lain yang masuk akal.
Artikel oleh Itzik Ben-Gan menjelaskan masalah ini.
sumber
Ada masalah nyata seputar beberapa kendala (mis. Unik) yang membutuhkan indeks tidak selaras.
Selain itu indeks yang tidak selaras memiliki biaya yang besar (terutama mereka mencegah banyak operator paralel untuk menggunakan thread-per-partisi dan alternatifnya adalah memori mahal) dan dengan demikian saya akan sangat menyarankan terhadap indeks tersebut. Bahkan dengan kasus-kasus yang didaftar oleh Paul, saya masih menyarankan agar indeks tidak selaras.
sumber
Indeks yang tidak selaras meniadakan manfaat utama dari partisi yang mengganti partisi. Jika Anda tidak bergantung pada itu dan mempartisi karena alasan lain (penyimpanan yang berbeda, partisi hanya baca, statistik tambahan, ...) maka lanjutkan dan buat indekseks yang tidak selaras.
Indeks yang tidak selaras berguna karena Anda dapat menerapkan batasan unik pada seluruh tabel dengannya. Juga, indeks tidak selaras tidak memerlukan kunci partisi untuk menjadi awalan pencarian implisit. Bayangkan memiliki 10.000 partisi dan permintaan tidak berdasarkan pada kunci partisi. Rencana eksekusi kemudian harus mencari ke 10.000 partisi jika indeks selaras. Jawaban lain memiliki contoh lebih lanjut.
sumber