Indeks Penyimpan Kolom - Panduan desain
Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Rekomendasi tingkat tinggi untuk merancang indeks penyimpan kolom. Beberapa keputusan desain yang baik membantu Anda mencapai kompresi data tinggi dan performa kueri yang dirancang untuk disediakan indeks penyimpan kolom.
Prasyarat
Artikel ini mengasumsikan Anda terbiasa dengan arsitektur dan terminologi penyimpan kolom. Untuk informasi selengkapnya, lihat Indeks penyimpan kolom: Gambaran Umum dan Arsitektur Indeks Penyimpan Kolom.
Mengetahui persyaratan data Anda
Sebelum merancang indeks penyimpan kolom, pahami sebanyak mungkin tentang persyaratan data Anda. Misalnya, pikirkan jawaban atas pertanyaan-pertanyaan ini:
- Seberapa besar meja saya?
- Apakah kueri saya sebagian besar melakukan analitik yang memindai berbagai nilai? Indeks penyimpan kolom dirancang untuk bekerja dengan baik untuk pemindaian rentang besar daripada mencari nilai tertentu.
- Apakah beban kerja saya melakukan banyak pembaruan dan penghapusan? Indeks penyimpan kolom berfungsi dengan baik saat data stabil. Kueri harus memperbarui dan menghapus kurang dari 10% baris.
- Apakah saya memiliki tabel fakta dan dimensi untuk gudang data?
- Apakah saya perlu melakukan analitik pada beban kerja transaksional? Jika demikian, lihat panduan desain penyimpan kolom untuk analitik operasional real time.
Anda mungkin tidak memerlukan indeks penyimpan kolom. Tabel Rowstore (atau B-tree) dengan tumpukan atau indeks berkluster berkinerja terbaik pada kueri yang mencari data, mencari nilai tertentu, atau untuk kueri pada rentang kecil nilai. Gunakan indeks rowstore dengan beban kerja transaksi karena cenderung memerlukan sebagian besar pencarian tabel alih-alih pemindaian tabel rentang besar.
Pilih indeks penyimpan kolom terbaik untuk kebutuhan Anda
Indeks penyimpan kolom berkluster atau non-kluster. Indeks penyimpan kolom berkluster dapat memiliki satu atau beberapa indeks pohon B non-kluster. Indeks penyimpan kolom mudah dicoba. Jika Anda membuat tabel sebagai indeks penyimpan kolom, Anda dapat dengan mudah mengonversi tabel kembali ke tabel rowstore dengan menghilangkan indeks penyimpan kolom.
Berikut adalah ringkasan opsi dan rekomendasi.
Opsi penyimpan kolom | Rekomendasi kapan harus digunakan | Kompresi |
---|---|---|
Indeks penyimpan kolom berkluster | Gunakan untuk: 1) Beban kerja gudang data tradisional dengan skema bintang atau snowflake 2) Beban kerja Internet of Things (IOT) yang menyisipkan data dalam volume besar dengan pembaruan dan penghapusan minimal. |
Rata-rata 10x |
Indeks penyimpan kolom berkluster yang diurutkan | Gunakan saat indeks penyimpan kolom berkluster dikueri melalui satu kolom predikat berurutan atau kumpulan kolom. Panduan ini mirip dengan memilih kolom kunci untuk indeks berkluster rowstore, meskipun grup baris yang mendasar terkompresi bertingkah berbeda. Untuk informasi selengkapnya, lihat MEMBUAT INDEKS PENYIMPAN KOLOM dan Penyetelan performa dengan indeks penyimpan kolom berkluster yang diurutkan. | Rata-rata 10x |
Indeks pohon B berkluster pada indeks penyimpan kolom berkluster | Gunakan untuk: 1. Menerapkan kunci primer dan batasan kunci asing pada indeks penyimpan kolom berkluster. 2. Percepat kueri yang mencari nilai tertentu atau rentang nilai kecil. 3. Percepat pembaruan dan penghapusan baris tertentu. |
Rata-rata 10x ditambah beberapa penyimpanan tambahan untuk NCIs. |
Indeks penyimpan kolom berkluster pada tumpukan berbasis disk atau indeks pohon B | Gunakan untuk: 1) Beban kerja OLTP yang memiliki beberapa kueri analitik. Anda dapat menghilangkan indeks pohon B yang dibuat untuk analitik dan menggantinya dengan satu indeks penyimpan kolom yang tidak terkluster. 2) Banyak beban kerja OLTP tradisional yang melakukan operasi Extract Transform and Load (ETL) untuk memindahkan data ke gudang data terpisah. Anda dapat menghilangkan ETL dan gudang data terpisah dengan membuat indeks penyimpan kolom non-klusster pada beberapa tabel OLTP. |
NCCI adalah indeks tambahan yang rata-rata membutuhkan penyimpanan 10% lebih banyak. |
Indeks penyimpan kolom pada tabel dalam memori | Rekomendasi yang sama dengan indeks penyimpan kolom nonclustered pada tabel berbasis disk, kecuali tabel dasar adalah tabel dalam memori. | Indeks penyimpan kolom adalah indeks tambahan. |
Menggunakan indeks penyimpan kolom berkluster untuk tabel gudang data besar
Indeks penyimpan kolom berkluster lebih dari indeks, ini adalah penyimpanan tabel utama. Ini mencapai kompresi data tinggi dan peningkatan signifikan dalam performa kueri pada fakta pergudangan data besar dan tabel dimensi. Indeks penyimpan kolom berkluster paling cocok untuk kueri analitik daripada kueri transaksional, karena kueri analitik cenderung melakukan operasi pada berbagai nilai daripada mencari nilai tertentu.
Pertimbangkan untuk menggunakan indeks penyimpan kolom berkluster saat:
- Setiap partisi memiliki setidaknya satu juta baris. Indeks penyimpan kolom memiliki grup baris dalam setiap partisi. Jika tabel terlalu kecil untuk mengisi grup baris dalam setiap partisi, Anda tidak akan mendapatkan manfaat kompresi penyimpan kolom dan performa kueri.
- Kueri terutama melakukan analitik pada rentang nilai. Misalnya, untuk menemukan nilai rata-rata kolom, kueri perlu memindai semua nilai kolom. Kemudian menggabungkan nilai dengan menjumlahkannya untuk menentukan rata-rata.
- Sebagian besar sisipan berada pada data dalam volume besar dengan pembaruan dan penghapusan minimal. Banyak beban kerja seperti Internet of Things (IOT) menyisipkan data dalam volume besar dengan pembaruan dan penghapusan minimal. Beban kerja ini dapat memperoleh manfaat dari kompresi dan perolehan performa kueri yang berasal dari menggunakan indeks penyimpan kolom berkluster.
Jangan gunakan indeks penyimpan kolom berkluster saat:
- Tabel memerlukan jenis data varchar(max), nvarchar(max), atau varbinary(max ). Atau, rancang indeks penyimpan kolom sehingga tidak menyertakan kolom ini (Berlaku untuk: SQL Server 2016 (13.x) dan versi sebelumnya).
- Data tabel tidak permanen. Pertimbangkan untuk menggunakan timbunan atau tabel sementara saat Anda perlu menyimpan dan menghapus data dengan cepat.
- Tabel memiliki kurang dari satu juta baris per partisi.
- Lebih dari 10% operasi pada tabel adalah pembaruan dan penghapusan. Sejumlah besar pembaruan dan penghapusan menyebabkan fragmentasi. Fragmentasi memengaruhi tingkat kompresi dan performa kueri hingga Anda menjalankan operasi yang disebut mengatur ulang yang memaksa semua data ke penyimpanan kolom dan menghapus fragmentasi. Untuk informasi selengkapnya, lihat Meminimalkan fragmentasi indeks di indeks penyimpan kolom.
Untuk informasi selengkapnya, lihat Indeks penyimpan kolom di pergudangan data.
Menggunakan indeks penyimpan kolom berkluster yang diurutkan untuk tabel gudang data besar
Untuk ketersediaan indeks penyimpan kolom yang diurutkan, lihat Indeks penyimpan kolom: Ringkasan#ordered-columnstore-index-availability).
Pertimbangkan untuk menggunakan indeks penyimpan kolom berkluster yang diurutkan dalam skenario berikut:
- Ketika data relatif statis (tanpa sering menulis dan menghapus) dan kunci indeks penyimpan kolom berkluster yang diurutkan bersifat statis, indeks penyimpan kolom berkluster yang diurutkan dapat memberikan keunggulan performa yang signifikan daripada indeks penyimpan kolom berkluster yang tidak diurutkan atau indeks berkluster rowstore untuk beban kerja analitis.
- Semakin berbeda nilai di kolom pertama kunci indeks penyimpan kolom berkluster yang diurutkan, semakin baik perolehan performa mungkin untuk indeks penyimpan kolom berkluster yang diurutkan. Hal ini disebabkan oleh peningkatan eliminasi segmen untuk data string. Untuk informasi selengkapnya, lihat eliminasi segmen.
- Pilih kunci indeks penyimpan kolom berkluster yang diurutkan yang akan sering dikueri dan dapat memperoleh manfaat dari eliminasi segmen, terutama kolom pertama kunci. Perolehan performa karena eliminasi segmen pada kolom lain dalam tabel akan kurang dapat diprediksi.
- Kasus penggunaan di mana hanya data analitik terbaru yang harus dikueri, misalnya, 15 detik terakhir, indeks penyimpan kolom berkluster yang diurutkan dapat memberikan eliminasi segmen untuk data yang lebih lama. Kolom pertama dalam kunci data penyimpan kolom berkluster yang diurutkan harus berupa data tanggal/waktu, seperti tanggal/waktu yang disisipkan atau dibuat. Eliminasi segmen akan lebih efektif dalam indeks penyimpan kolom berkluster yang diurutkan daripada dalam indeks penyimpan kolom berkluster yang tidak diurutkan.
- Pertimbangkan indeks penyimpan kolom berkluster yang diurutkan pada tabel yang berisi kunci dengan data GUID, di mana jenis data pengidentifikasi unik sekarang dapat digunakan untuk eliminasi segmen.
Indeks penyimpan kolom berkluster yang diurutkan mungkin tidak seefektif dalam skenario ini:
- Mirip dengan indeks penyimpan kolom lainnya, tingkat aktivitas penyisipan yang tinggi dapat membuat I/O penyimpanan yang berlebihan.
- Untuk beban kerja di mana ada banyak operasi tulis, kualitas eliminasi segmen akan berkurang dari waktu ke waktu karena pemeliharaan grup baris oleh penggerak tuple. Ini dapat dimitigasi dengan pemeliharaan rutin indeks penyimpan kolom dengan ALTER INDEX REORGANIZE.
Menambahkan indeks berkluster B-tree untuk pencarian tabel yang efisien
Dimulai dengan SQL Server 2016 (13.x), Anda dapat membuat indeks pohon B atau rowstore berkluster sebagai indeks sekunder pada indeks penyimpan kolom berkluster. Indeks pohon B yang tidak dikluster diperbarui saat perubahan terjadi pada indeks penyimpan kolom. Ini adalah fitur canggih yang dapat Anda gunakan untuk keuntungan Anda.
Dengan menggunakan indeks pohon B sekunder, Anda dapat secara efisien mencari baris tertentu tanpa memindai semua baris. Opsi lain juga tersedia. Misalnya, Anda dapat memberlakukan batasan kunci primer atau asing dengan menggunakan batasan UNIK pada indeks pohon B. Karena nilai non-unik akan gagal dimasukkan ke dalam indeks pohon B, SQL Server tidak dapat menyisipkan nilai ke dalam penyimpan kolom.
Pertimbangkan untuk menggunakan indeks pohon B pada indeks penyimpan kolom untuk:
- Jalankan kueri yang mencari nilai tertentu atau rentang nilai kecil.
- Menerapkan batasan seperti kunci primer atau batasan kunci asing.
- Lakukan operasi pembaruan dan penghapusan secara efisien. Indeks pohon B dapat dengan cepat menemukan baris tertentu untuk pembaruan dan penghapusan tanpa memindai tabel lengkap atau partisi tabel.
- Anda memiliki penyimpanan tambahan yang tersedia untuk menyimpan indeks pohon B.
Menggunakan indeks penyimpan kolom non-klusster untuk analitik real-time
Dimulai dengan SQL Server 2016 (13.x), Anda dapat memiliki indeks penyimpan kolom noncluster pada tabel berbasis disk rowstore atau tabel OLTP dalam memori. Hal ini memungkinkan untuk menjalankan analitik secara real time pada tabel transaksional. Saat transaksi terjadi pada tabel yang mendasarinya, Anda dapat menjalankan analitik pada indeks penyimpan kolom. Karena satu tabel mengelola kedua indeks, perubahan tersedia secara real time untuk indeks rowstore dan penyimpan kolom.
Karena indeks penyimpan kolom mencapai kompresi data 10x lebih baik daripada indeks rowstore, indeks hanya membutuhkan sedikit penyimpanan tambahan. Misalnya, jika tabel rowstore terkompresi membutuhkan waktu 20 GB, indeks penyimpan kolom mungkin memerlukan tambahan 2 GB. Ruang tambahan yang diperlukan juga tergantung pada jumlah kolom dalam indeks penyimpan kolom yang tidak terkluster.
Pertimbangkan untuk menggunakan indeks penyimpan kolom non-klusster untuk:
Jalankan analitik secara real time pada tabel rowstore transaksional. Anda dapat mengganti indeks pohon B yang sudah ada yang dirancang untuk analitik dengan indeks penyimpan kolom yang tidak terkluster.
Hilangkan kebutuhan akan gudang data terpisah. Secara tradisional, perusahaan menjalankan transaksi pada tabel rowstore lalu memuat data ke gudang data terpisah untuk menjalankan analitik. Untuk banyak beban kerja, Anda dapat menghilangkan proses pemuatan dan gudang data terpisah dengan membuat indeks penyimpan kolom yang tidak terdaftar pada tabel transaksional.
SQL Server 2016 (13.x) menawarkan beberapa strategi untuk membuat skenario ini berkinerja. Sangat mudah untuk mencobanya karena Anda dapat mengaktifkan indeks penyimpan kolom tanpa perubahan pada aplikasi OLTP Anda.
Untuk menambahkan sumber daya pemrosesan tambahan, Anda dapat menjalankan analitik pada sekunder yang dapat dibaca. Menggunakan sekunder yang dapat dibaca memisahkan pemrosesan beban kerja transaksi dan beban kerja analitik.
Untuk informasi selengkapnya, lihat Mulai menggunakan Columnstore untuk analitik operasional real time
Untuk informasi selengkapnya tentang memilih indeks penyimpan kolom terbaik, lihat blog Sunil Agarwal Indeks penyimpan kolom mana yang tepat untuk beban kerja saya?.
Menggunakan partisi tabel untuk manajemen data dan performa kueri
Indeks penyimpan kolom mendukung partisi, yang merupakan cara yang baik untuk mengelola dan mengarsipkan data. Pemartisian juga meningkatkan performa kueri dengan membatasi operasi ke satu atau beberapa partisi.
Menggunakan partisi untuk membuat data lebih mudah dikelola
Untuk tabel besar, satu-satunya cara praktis untuk mengelola rentang data adalah dengan menggunakan partisi. Keuntungan partisi untuk tabel rowstore juga berlaku untuk indeks penyimpan kolom.
Misalnya, tabel rowstore dan columnstore menggunakan partisi untuk:
- Mengontrol ukuran cadangan inkremental. Anda dapat mencadangkan partisi untuk memisahkan grup file lalu menandainya sebagai baca-saja. Dengan melakukan ini, cadangan di masa mendatang akan melewati grup file baca-saja.
- Hemat biaya penyimpanan dengan memindahkan partisi yang lebih lama ke penyimpanan yang lebih murah. Misalnya, Anda dapat menggunakan pengalihan partisi untuk memindahkan partisi ke lokasi penyimpanan yang lebih murah.
- Lakukan operasi secara efisien dengan membatasi operasi ke partisi. Misalnya, Anda hanya dapat menargetkan partisi terfragmentasi untuk pemeliharaan indeks.
Selain itu, dengan indeks penyimpan kolom, Anda menggunakan partisi untuk:
- Hemat tambahan 30% dalam biaya penyimpanan. Anda dapat mengompres partisi lama dengan
COLUMNSTORE_ARCHIVE
opsi kompresi. Data akan lebih lambat untuk performa kueri, yang jarang dapat diterima jika partisi dikueri.
Menggunakan partisi untuk meningkatkan performa kueri
Dengan menggunakan partisi, Anda dapat membatasi kueri untuk memindai hanya partisi tertentu, yang membatasi jumlah baris untuk dipindai. Misalnya, jika indeks dipartisi berdasarkan tahun dan kueri menganalisis data dari tahun lalu, indeks hanya perlu memindai data dalam satu partisi.
Menggunakan lebih sedikit partisi untuk indeks penyimpan kolom
Kecuali Anda memiliki ukuran data yang cukup besar, indeks penyimpan kolom berkinerja terbaik dengan partisi yang lebih sedikit daripada yang mungkin Anda gunakan untuk indeks rowstore. Jika Anda tidak memiliki setidaknya satu juta baris per partisi, sebagian besar baris Anda mungkin masuk ke deltastore tempat baris tidak menerima manfaat performa kompresi penyimpan kolom. Misalnya, jika Anda memuat satu juta baris ke dalam tabel dengan 10 partisi dan setiap partisi menerima 100.000 baris, semua baris akan masuk ke grup baris delta.
Contoh:
- Muat 1.000.000 baris ke dalam satu partisi atau tabel yang tidak dipartisi. Anda mendapatkan satu grup baris terkompresi dengan 1.000.000 baris. Ini bagus untuk kompresi data tinggi dan performa kueri yang cepat.
- Muat 1.000.000 baris secara merata ke dalam 10 partisi. Setiap partisi mendapatkan 100.000 baris, yang kurang dari ambang minimum untuk pemadatan penyimpan kolom. Akibatnya indeks penyimpan kolom dapat memiliki 10 grup baris delta dengan masing-masing 100.000 baris. Ada cara untuk memaksa grup baris delta ke dalam penyimpan kolom. Namun, jika ini adalah satu-satunya baris dalam indeks penyimpan kolom, grup baris terkompresi akan terlalu kecil untuk kompresi terbaik dan performa kueri.
Untuk informasi selengkapnya tentang pemartisian, lihat posting blog Sunil Agarwal, Haruskah saya mempartisi indeks penyimpan kolom saya?.
Pilih metode kompresi data yang sesuai
Indeks penyimpan kolom menawarkan dua pilihan untuk kompresi data: pemadatan penyimpan kolom dan kompresi arsip. Anda dapat memilih opsi kompresi saat membuat indeks, atau mengubahnya nanti dengan ALTER INDEX ... BANGUN KEMBALI.
Menggunakan kompresi penyimpan kolom untuk performa kueri terbaik
Kompresi penyimpan kolom biasanya mencapai tingkat kompresi 10x lebih baik melalui indeks rowstore. Ini adalah metode kompresi standar untuk indeks penyimpan kolom dan memungkinkan performa kueri yang cepat.
Menggunakan kompresi arsip untuk pemadatan data terbaik
Kompresi arsip dirancang untuk pemadatan maksimum saat performa kueri tidak sepenting. Ini mencapai tingkat kompresi data yang lebih tinggi daripada kompresi penyimpan kolom, tetapi dilengkapi dengan harga. Dibutuhkan waktu lebih lama untuk mengompresi dan mendekompresi data, sehingga tidak cocok untuk performa kueri yang cepat.
Menggunakan pengoptimalan saat Anda mengonversi tabel rowstore menjadi indeks penyimpan kolom
Jika data Anda sudah berada dalam tabel rowstore, Anda bisa menggunakan CREATE COLUMNSTORE INDEX untuk mengonversi tabel menjadi indeks penyimpan kolom berkluster. Ada beberapa pengoptimalan yang akan meningkatkan performa kueri setelah tabel dikonversi, dijelaskan berikutnya.
Gunakan MAXDOP untuk meningkatkan kualitas grup baris
Anda dapat mengonfigurasi jumlah maksimum prosesor untuk mengonversi indeks pohon B timbunan atau terkluster ke indeks penyimpan kolom. Untuk mengonfigurasi prosesor, gunakan tingkat maksimum opsi paralelisme (MAXDOP).
Jika Anda memiliki data dalam jumlah besar, MAXDOP 1
kemungkinan akan terlalu lambat. Meningkatkan MAXDOP agar 4
berfungsi dengan baik. Jika ini menghasilkan beberapa grup baris yang tidak memiliki jumlah baris yang optimal, Anda dapat menjalankan ALTER INDEX REORGANIZE untuk menggabungkannya bersama-sama di latar belakang.
Pertahankan urutan yang diurutkan dari indeks pohon B
Karena indeks pohon B sudah menyimpan baris dalam urutan yang diurutkan, mempertahankan urutan tersebut saat baris dikompresi ke dalam indeks penyimpan kolom dapat meningkatkan performa kueri.
Indeks penyimpan kolom tidak mengurutkan data, tetapi menggunakan metadata untuk melacak nilai minimum dan maksimum setiap segmen kolom di setiap grup baris. Saat memindai rentang nilai, ia dapat dengan cepat menghitung kapan harus melewati grup baris. Saat data diurutkan, lebih banyak grup baris dapat dilewati.
Untuk mempertahankan urutan yang diurutkan selama konversi:
Gunakan CREATE COLUMNSTORE INDEX dengan klausa DROP_EXISTING. Ini juga mempertahankan nama indeks. Jika Anda memiliki skrip yang sudah menggunakan nama indeks rowstore, Anda tidak perlu memperbaruinya.
Contoh ini mengonversi indeks rowstore berkluster pada tabel bernama
MyFactTable
ke indeks penyimpan kolom berkluster. Nama indeks,ClusteredIndex_d473567f7ea04d7aafcac5364c241e09
, tetap sama.CREATE CLUSTERED COLUMNSTORE INDEX ClusteredIndex_d473567f7ea04d7aafcac5364c241e09 ON MyFactTable WITH (DROP_EXISTING = ON);
Memahami eliminasi segmen
Setiap grup baris berisi satu segmen kolom untuk setiap kolom dalam tabel. Setiap segmen kolom dikompresi bersama-sama dan disimpan di media fisik.
Ada metadata dengan setiap segmen untuk memungkinkan eliminasi segmen dengan cepat tanpa membacanya. Pilihan jenis data mungkin berdampak signifikan pada predikat filter umum berbasis performa kueri untuk kueri pada indeks penyimpan kolom. Untuk informasi selengkapnya, lihat eliminasi segmen.
Tugas Terkait
Ini adalah tugas untuk membuat dan memelihara indeks penyimpan kolom.
Tugas | Artikel referensi | Catatan |
---|---|---|
Buat tabel sebagai penyimpan kolom. | BUAT TABEL (Transact-SQL) | Dimulai dengan SQL Server 2016 (13.x), Anda dapat membuat tabel sebagai indeks penyimpan kolom berkluster. Anda tidak perlu terlebih dahulu membuat tabel rowstore lalu mengonversinya menjadi penyimpan kolom. |
Buat tabel memori dengan indeks penyimpan kolom. | BUAT TABEL (Transact-SQL) | Dimulai dengan SQL Server 2016 (13.x), Anda dapat membuat tabel yang dioptimalkan memori dengan indeks penyimpan kolom. Indeks penyimpan kolom juga dapat ditambahkan setelah tabel dibuat, menggunakan sintaks ALTER TABLE ADD INDEX. |
Mengonversi tabel rowstore menjadi penyimpan kolom. | BUAT INDEKS PENYIMPAN KOLOM (Transact-SQL) | Mengonversi timbunan atau B-tree yang ada menjadi penyimpan kolom. Contoh menunjukkan cara menangani indeks yang ada dan juga nama indeks saat melakukan konversi ini. |
Mengonversi tabel penyimpan kolom menjadi rowstore. | MEMBUAT INDEKS TERKLUSTER (Transact-SQL) atau Mengonversi tabel penyimpan kolom kembali ke tumpukan rowstore | Biasanya konversi ini tidak diperlukan, tetapi mungkin ada saat-saat ketika Anda perlu mengonversi. Contoh menunjukkan cara mengonversi penyimpan kolom menjadi tumpuk atau indeks berkluster. |
Buat indeks penyimpan kolom pada tabel rowstore. | BUAT INDEKS PENYIMPAN KOLOM (Transact-SQL) | Tabel rowstore dapat memiliki satu indeks penyimpan kolom. Dimulai dengan SQL Server 2016 (13.x), indeks penyimpan kolom dapat memiliki kondisi yang difilter. Contoh memperlihatkan sintaks dasar. |
Buat indeks berkinerja untuk analitik operasional. | Mulai menggunakan Columnstore untuk analitik operasional real time | Menjelaskan cara membuat penyimpan kolom pelengkap dan indeks pohon B sehingga kueri OLTP menggunakan indeks pohon B dan kueri analitik menggunakan indeks penyimpan kolom. |
Buat indeks penyimpan kolom berkinerja untuk pergudangan data. | Indeks penyimpan kolom di pergudangan data | Menjelaskan cara menggunakan indeks pohon B pada tabel penyimpan kolom untuk membuat kueri pergudangan data berkinerja. |
Gunakan indeks pohon B untuk memberlakukan batasan kunci utama pada indeks penyimpan kolom. | Indeks penyimpan kolom di pergudangan data | Memperlihatkan cara menggabungkan indeks pohon B dan penyimpan kolom untuk memberlakukan batasan kunci utama pada indeks penyimpan kolom. |
Menghilangkan indeks penyimpan kolom | DROP INDEX (Transact-SQL) | Menghilangkan indeks penyimpan kolom menggunakan sintaks DROP INDEX standar yang digunakan indeks pohon B. Menghilangkan indeks penyimpan kolom berkluster akan mengonversi tabel penyimpan kolom menjadi tumpukan. |
Menghapus baris dari indeks penyimpan kolom | DELETE (Transact-SQL) | Gunakan DELETE (Transact-SQL) untuk menghapus baris. baris penyimpan kolom: SQL Server menandai baris sebagai dihapus secara logis tetapi tidak mengklaim kembali penyimpanan fisik untuk baris hingga indeks dibangun kembali. baris deltastore : SQL Server secara logis dan menghapus baris secara fisik. |
Memperbarui baris di indeks penyimpan kolom | UPDATE (Transact-SQL) | Gunakan UPDATE (Transact-SQL) untuk memperbarui baris. baris penyimpan kolom: SQL Server menandai baris sebagai dihapus secara logis, lalu menyisipkan baris yang diperbarui ke deltastore. baris deltastore : SQL Server memperbarui baris di deltastore. |
Paksa semua baris di deltastore untuk masuk ke penyimpan kolom. | UBAH INDEKS (Transact-SQL) ... MEMBANGUN ULANG Optimalkan pemeliharaan indeks untuk meningkatkan performa kueri dan mengurangi konsumsi sumber daya |
ALTER INDEX REBUILD dengan opsi memaksa semua baris untuk masuk ke penyimpan kolom. |
Defragmentasi indeks penyimpan kolom | ALTER INDEX (Transact-SQL) | ALTER INDEX ... REORGANIZE defragments indeks penyimpan kolom secara online. |
Gabungkan tabel dengan indeks penyimpan kolom. | MERGE (Transact-SQL) |
Konten terkait
Untuk membuat indeks penyimpan kolom kosong untuk:
- SQL Server atau SQL Database, lihat CREATE TABLE (Transact-SQL).
- Azure Synapse Analytics, lihat CREATE TABLE (Azure Synapse Analytics).
Untuk informasi selengkapnya tentang cara mengonversi tumpukan rowstore atau indeks pohon B yang ada menjadi indeks penyimpan kolom berkluster, atau untuk membuat indeks penyimpan kolom non-kluster, lihat CREATE COLUMNSTORE INDEX (Transact-SQL).