Indeks penyimpan kolom - apa yang baru
Berlaku untuk:
SQL Server (semua versi yang didukung)
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics Analytics
Platform System (PDW)
Ringkasan fitur penyimpan kolom tersedia untuk setiap versi SQL Server, dan rilis terbaru SQL Database, Azure Synapse Analytics, dan Analytics Platform System (PDW).
Catatan
Untuk SQL Database, indeks penyimpan kolom tersedia di tingkat Azure SQL Database Premium, tingkat Standar - S3 ke atas, dan semua tingkat vCore. Untuk SQL Server 2016 (13.x) SP1 ke atas, indeks penyimpan kolom tersedia di semua edisi. Untuk SQL Server 2016 (13.x) (sebelum SP1) dan versi yang lebih lama, indeks penyimpan kolom hanya tersedia di Edisi Perusahaan.
Ringkasan Fitur untuk Rilis Produk
Tabel ini meringkas fitur utama untuk indeks penyimpan kolom dan produk tempat mereka tersedia.
| Fitur Indeks Penyimpan Kolom | SQL Server 2012 (11.x) | SQL Server 2014 (12.x) | SQL Server 2016 (13.x) | SQL Server 2017 (14.x) | SQL Server 2019 (15.x) | SQL Database | Azure Synapse Analytics |
|---|---|---|---|---|---|---|---|
| Eksekusi mode batch untuk kueri multi-utas | ya | ya | ya | ya | ya | ya | ya |
| Eksekusi mode batch untuk kueri berutas tunggal | ya | ya | ya | ya | ya | ||
| Opsi kompresi arsip | ya | ya | ya | ya | ya | ya | |
| Isolasi rekam jepret dan isolasi rekam jepret yang diterapkan baca | ya | ya | ya | ya | ya | ||
| Tentukan indeks penyimpan kolom saat membuat tabel | ya | ya | ya | ya | ya | ||
| Always On mendukung indeks penyimpan kolom | ya | ya | ya | ya | ya | ya | ya |
| Sekunder yang dapat dibaca AlwaysOn mendukung indeks penyimpan kolom non-kluster baca-saja | ya | ya | ya | ya | ya | ya | ya |
| Sekunder yang dapat dibaca AlwaysOn mendukung indeks penyimpan kolom yang dapat diperbarui | ya | ya | |||||
| Indeks penyimpan kolom non-kluster baca-saja pada heap atau B-tree | ya | ya | Ya 1 | Ya 1 | Ya 1 | Ya 1 | Ya 1 |
| Indeks penyimpan kolom nonkluster yang dapat diperbarui pada tumpukan atau pohon B | ya | ya | ya | ya | ya | ||
| Indeks pohon B tambahan yang diizinkan pada tumpukan atau pohon B yang memiliki indeks penyimpan kolom non-klusster | ya | ya | ya | ya | ya | ya | ya |
| Indeks penyimpan kolom berkluster yang dapat diperbarui | ya | ya | ya | ya | ya | ya | |
| Indeks pohon B pada indeks penyimpan kolom berkluster | ya | ya | ya | ya | ya | ||
| Indeks penyimpan kolom pada tabel yang dioptimalkan memori | ya | ya | ya | ya | ya | ||
| Definisi indeks penyimpan kolom non-kluster mendukung penggunaan kondisi yang difilter | ya | ya | ya | ya | ya | ||
Opsi penundaan pemadatan untuk indeks penyimpan kolom di CREATE TABLE dan ALTER TABLE |
ya | ya | ya | ya | ya | ||
| Indeks penyimpan kolom dapat memiliki kolom komputasi yang tidak bertahan | ya | ya | |||||
| Dukungan penggabungan latar belakang penggerak tuple | ya | ya | ya |
1 Untuk membuat indeks penyimpan kolom nonkluster baca-saja, simpan indeks pada grup file baca-saja.
Catatan
Tingkat paralelisme (DOP) untuk operasi mode batch dibatasi hingga 2 untuk SQL Server Edisi Standar dan 1 untuk SQL Server Web dan Edisi Ekspres. Ini mengacu pada indeks penyimpan kolom yang dibuat melalui tabel berbasis disk dan tabel yang dioptimalkan memori.
SQL Server 2019 (15.x)
SQL Server 2019 (15.x) menambahkan fitur baru ini.
Fungsional
- Dimulai dengan SQL Server 2019 (15.x), penggerak tuple dibantu oleh tugas penggabungan latar belakang yang secara otomatis memadatkan grup baris delta TERBUKA yang lebih kecil yang telah ada selama beberapa waktu seperti yang ditentukan oleh ambang batas internal, atau menggabungkan grup baris TERKOMPRESI dari tempat sejumlah besar baris telah dihapus. Sebelumnya, operasi reorganisasi indeks diperlukan untuk menggabungkan grup baris dengan data yang dihapus sebagian. Ini meningkatkan kualitas indeks penyimpan kolom dari waktu ke waktu.
SQL Server 2017 (14.x)
SQL Server 2017 (14.x) menambahkan fitur baru ini.
Fungsional
- SQL Server 2017 (14.x) mendukung kolom komputasi yang tidak bertahan dalam indeks penyimpan kolom berkluster. Kolom komputasi yang dipertahankan tidak didukung dalam indeks penyimpan kolom berkluster. Anda tidak dapat membuat indeks non-kluster pada indeks penyimpan kolom yang memiliki kolom komputasi.
SQL Server 2016 (13.x)
SQL Server 2016 (13.x) menambahkan peningkatan utama untuk meningkatkan performa dan fleksibilitas indeks penyimpan kolom. Peningkatan ini meningkatkan skenario pergudangan data dan mengaktifkan analitik operasional real time.
Fungsional
Tabel rowstore dapat memiliki satu indeks penyimpan kolom nonkluster yang dapat diperbarui. Sebelumnya, indeks penyimpan kolom non-kluster bersifat baca-saja.
Definisi indeks penyimpan kolom non-kluster mendukung penggunaan kondisi yang difilter. Untuk meminimalkan dampak performa penambahan indeks penyimpan kolom pada tabel OLTP, gunakan kondisi yang difilter untuk membuat indeks penyimpan kolom non-kluster hanya pada data dingin beban kerja operasional Anda.
Tabel dalam memori dapat memiliki satu indeks penyimpan kolom. Anda dapat membuatnya saat tabel dibuat atau menambahkannya nanti dengan ALTER TABLE (Transact-SQL). Sebelumnya, hanya tabel berbasis disk yang dapat memiliki indeks penyimpan kolom.
Indeks penyimpan kolom berkluster dapat memiliki satu atau beberapa indeks rowstore non-kluster. Sebelumnya, indeks penyimpan kolom tidak mendukung indeks non-kluster. SQL Server secara otomatis mempertahankan indeks nonkluster untuk operasi DML.
Dukungan untuk kunci primer dan kunci asing dengan menggunakan indeks pohon B untuk memberlakukan batasan ini pada indeks penyimpan kolom berkluster.
Indeks penyimpan kolom memiliki opsi penundaan kompresi yang meminimalkan dampak beban kerja transaksional pada analitik operasional real time. Opsi ini memungkinkan baris yang sering berubah untuk menstabilkan sebelum memadatkannya ke dalam penyimpan kolom. Untuk detailnya, lihat CREATE COLUMNSTORE INDEX (Transact-SQL) dan Mulai menggunakan Columnstore untuk analitik operasional real time.
Performa untuk tingkat kompatibilitas database 120 atau 130
Indeks penyimpan kolom mendukung tingkat isolasi rekam jepret yang diterapkan baca (RCSI) dan isolasi rekam jepret (SI). Ini memungkinkan kueri analitik konsisten transaksional tanpa kunci.
Penyimpan kolom mendukung defragmentasi indeks dengan menghapus baris yang dihapus tanpa perlu membangun ulang indeks secara eksplisit. Pernyataan menghapus
ALTER INDEX ... REORGANIZEbaris yang dihapus, berdasarkan kebijakan yang ditentukan secara internal, dari penyimpan kolom sebagai operasi onlineIndeks penyimpan kolom dapat diakses pada replika sekunder yang dapat dibaca AlwaysOn. Anda dapat meningkatkan performa untuk analitik operasional dengan membongkar kueri analitik ke replika sekunder Always On.
Pushdown Agregat menghitung fungsi
MINagregat , ,MAX,SUMCOUNT, danAVGselama pemindaian tabel ketika jenis data menggunakan tidak lebih dari 8 byte, dan bukan jenis data string. Pushdown agregat didukung dengan atau tanpaGROUP BYklausul untuk indeks penyimpan kolom berkluster dan indeks penyimpan kolom non-kluster. Pada SQL Server, peningkatan ini disediakan untuk edisi Enterprise.Pushdown Predikat String mempercepat kueri yang membandingkan string jenis VARCHAR/CHAR atau NVARCHAR/NCHAR. Ini berlaku untuk operator perbandingan umum dan mencakup operator seperti
LIKEyang menggunakan filter bitmap. Ini berfungsi dengan semua kolae yang didukung. Pada SQL Server, peningkatan ini disediakan untuk edisi Enterprise.Peningkatan untuk operasi mode batch dengan memanfaatkan kemampuan perangkat keras berbasis vektor. Mesin Database mendeteksi tingkat dukungan CPU untuk ekstensi perangkat keras AVX 2 (Advanced Vector Extensions) dan SSE 4 (Streaming SIMD Extensions 4), dan menggunakannya jika didukung. Pada SQL Server, peningkatan ini disediakan untuk edisi Enterprise.
Performa untuk tingkat kompatibilitas database 130
Dukungan eksekusi mode batch baru untuk kueri menggunakan salah satu operasi ini:
SORT- Agregat dengan beberapa fungsi yang berbeda. Beberapa contoh:
COUNT/COUNT,AVG/SUM,CHECKSUM_AGG,STDEV/STDEVP - Fungsi agregat jendela:
COUNT, ,COUNT_BIG,SUM,AVGMIN,MAX, danCLR - Agregat yang ditentukan pengguna jendela:
CHECKSUM_AGG, ,STDEV,STDEVP,VARVARP, danGROUPING - Fungsi analitik agregat jendela:
LAG, ,LEAD,FIRST_VALUE,LAST_VALUE,PERCENTILE_CONTPERCENTILE_DISC,CUME_DIST, danPERCENT_RANK
Kueri berutas tunggal yang berjalan di bawah
MAXDOP 1atau dengan rencana kueri serial dijalankan dalam mode batch. Kueri multi-utas yang sebelumnya hanya dijalankan dengan eksekusi batch.Kueri tabel memori yang dioptimalkan dapat memiliki paket paralel dalam mode InterOp SQL baik saat mengakses data di rowstore atau di indeks penyimpan kolom.
Dukungan
Tampilan sistem ini baru untuk penyimpan kolom:
DMV berbasis OLTP dalam memori ini berisi pembaruan untuk penyimpan kolom:
Batasan
- Untuk tabel dalam memori, indeks penyimpan kolom harus menyertakan semua kolom; indeks penyimpan kolom tidak boleh memiliki kondisi yang difilter.
- Untuk tabel dalam memori, kueri pada indeks penyimpan kolom hanya berjalan dalam mode InterOP, dan bukan dalam mode asli dalam memori. Eksekusi paralel didukung.
SQL Server 2014 (12.x)
SQL Server 2014 (12.x) memperkenalkan indeks penyimpanan kolom berkluster sebagai format penyimpanan utama. Ini memungkinkan pemuatan reguler serta memperbarui, menghapus, dan menyisipkan operasi.
- Tabel dapat menggunakan indeks penyimpanan kolom berkluster sebagai penyimpanan tabel utama. Tidak ada indeks lain yang diizinkan pada tabel, tetapi indeks penyimpanan kolom berkluster dapat diperbarui sehingga Anda dapat melakukan pemuatan reguler dan membuat perubahan pada baris individual.
- Indeks penyimpanan kolom non-kluster terus memiliki fungsionalitas yang sama seperti pada SQL Server 2012 (11.x) kecuali untuk operator tambahan yang sekarang dapat dijalankan dalam mode batch. Ini masih belum dapat diperbarui kecuali dengan membangun kembali, dan dengan menggunakan pengalihan partisi. Indeks penyimpan kolom non-kluster hanya didukung pada tabel berbasis disk, dan bukan pada tabel dalam memori.
- Indeks penyimpanan kolom berkluster dan non-kluster memiliki opsi pemadatan arsip yang semakin memadatkan data. Opsi pengarsipan berguna untuk mengurangi ukuran data baik dalam memori maupun pada disk, tetapi melakukan performa kueri yang lambat. Ini bekerja dengan baik untuk data yang jarang diakses.
- Indeks penyimpan kolom berkluster dan fungsi indeks penyimpan kolom non-kluster dengan cara yang sangat mirip; mereka menggunakan format penyimpanan kolumnar yang sama, mesin pemrosesan kueri yang sama, dan serangkaian tampilan manajemen dinamis yang sama. Perbedaannya adalah jenis indeks primer versus sekunder, dan indeks penyimpan kolom non-kluster bersifat baca-saja.
- Operator ini berjalan dalam mode batch untuk kueri multi-utas: memindai, memfilter, memproyeksikan, bergabung, mengelompokkan menurut, dan menggabungkan semua.
SQL Server 2012 (11.x)
SQL Server 2012 (11.x) memperkenalkan indeks penyimpan kolom nonkluster sebagai jenis indeks lain pada tabel rowstore dan pemrosesan batch untuk kueri pada data penyimpan kolom.
- Tabel rowstore dapat memiliki satu indeks penyimpan kolom non-klusster.
- Indeks penyimpan kolom bersifat baca-saja. Setelah Anda membuat indeks penyimpan kolom, Anda tidak dapat memperbarui tabel dengan
INSERT,DELETE, danUPDATEoperasi; untuk melakukan operasi ini, Anda harus menghilangkan indeks, memperbarui tabel dan membangun kembali indeks penyimpan kolom. Anda dapat memuat data tambahan ke dalam tabel dengan menggunakan pengalihan partisi. Keuntungan dari pengalihan partisi adalah Anda dapat memuat data tanpa menghilangkan dan membangun kembali indeks penyimpan kolom. - Indeks penyimpanan kolom selalu memerlukan penyimpanan tambahan, biasanya tambahan 10% melalui rowstore, karena menyimpan salinan data.
- Pemrosesan batch memberikan performa kueri 2x atau lebih baik, tetapi hanya tersedia untuk eksekusi kueri paralel.
Lihat juga
Panduan Desain Indeks Penyimpan Kolom
Panduan Pemuatan Data Indeks Penyimpan Kolom
Performa Kueri Indeks Penyimpan Kolom
Mulai menggunakan Columnstore untuk analitik operasional real time
Indeks Penyimpan Kolom untuk Pergudangan Data
Mengatur Ulang dan Membangun Ulang Indeks