Apa yang baru dalam indeks penyimpan kolom

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Pelajari tentang fitur penyimpan kolom mana yang tersedia untuk setiap versi SQL Server, dan rilis terbaru SQL Database, Azure Synapse Analytics, dan Analytics Platform System (PDW).

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)1 SQL Server 2017 (14.x) SQL Server 2019 (15.x) SQL Server 2022 (16.x) SQL Database1 Kumpulan SQL khusus Azure Synapse Analytics
Eksekusi mode batch untuk kueri multi-utas2 yes yes yes yes yes yes yes yes
Eksekusi mode batch untuk kueri berutas tunggal yes yes yes yes yes yes
Opsi kompresi arsip yes yes yes yes yes yes yes
Isolasi rekam jepret dan isolasi rekam jepret yang diterapkan baca yes yes yes yes yes yes
Tentukan indeks penyimpan kolom saat membuat tabel yes yes yes yes yes yes
Always On mendukung indeks penyimpan kolom yes yes yes yes yes yes yes yes
Sekunder yang dapat dibaca AlwaysOn mendukung indeks penyimpan kolom non-kluster baca-saja yes yes yes yes yes yes yes yes
Sekunder yang dapat dibaca AlwaysOn mendukung indeks penyimpan kolom yang dapat diperbarui yes yes yes yes
Indeks penyimpan kolom non-kluster baca-saja pada tumpukan atau pohon B yes yes Ya 3 Ya 3 Ya 3 Ya 3 Ya 3 Ya 3
Indeks penyimpan kolom nonclustered yang dapat diperbarui pada tumpukan atau pohon B yes yes yes yes yes yes
Indeks pohon B tambahan yang diizinkan pada tumpukan atau pohon B yang memiliki indeks penyimpan kolom non-klusster yes yes yes yes yes yes yes yes
Indeks penyimpan kolom berkluster yang dapat diperbarui yes yes yes yes yes yes yes
Indeks pohon B pada indeks penyimpan kolom berkluster yes yes yes yes yes yes
Indeks penyimpan kolom pada tabel yang dioptimalkan memori yes yes yes yes yes yes
Definisi indeks penyimpan kolom non-kluster mendukung penggunaan kondisi yang difilter yes yes yes yes yes yes
Opsi penundaan pemadatan untuk indeks penyimpan kolom di dan CREATE TABLEALTER TABLE yes yes yes yes yes yes
Dukungan untuk jenis nvarchar(maks) yes yes yes yes no 4
Indeks penyimpan kolom dapat memiliki kolom komputasi yang tidak bertahan yes yes yes
Dukungan penggabungan latar belakang penggerak tuple yes yes yes yes
Indeks penyimpan kolom berkluster yang diurutkan yes yes yes

1 Untuk SQL Database, indeks penyimpan kolom tersedia di tingkat Azure SQL Database DTU Premium, tingkat Standar DTU - S3 ke atas, dan semua tingkat vCore. Untuk SQL Server 2016 (13.x) SP1 dan versi yang lebih baru, 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.

2 Tingkat paralelisme (DOP) untuk operasi mode batch dibatasi hingga 2 untuk SQL Server Standard Edition dan 1 untuk SQL Server Web dan Express Editions. Batasan ini mengacu pada indeks penyimpan kolom yang dibuat melalui tabel berbasis disk dan tabel yang dioptimalkan memori.

3 Untuk membuat indeks penyimpan kolom non-kluster baca-saja, simpan indeks pada grup file baca-saja.

4 Tidak didukung di kumpulan SQL khusus tetapi didukung di kumpulan SQL tanpa server.

SQL Server 2022 (16.x)

SQL Server 2022 (16.x) menambahkan fitur baru ini. Untuk informasi selengkapnya, lihat Apa yang baru di SQL Server 2022 (16.x).

  • Indeks penyimpan kolom berkluster yang diurutkan meningkatkan performa untuk kueri berdasarkan predikat kolom yang diurutkan. Indeks penyimpan kolom yang diurutkan dapat meningkatkan performa dengan melewati segmen data sama sekali. Ini dapat secara drastis mengurangi IO yang diperlukan untuk menyelesaikan kueri pada data penyimpan kolom. Untuk informasi selengkapnya, lihat eliminasi segmen. Indeks penyimpan kolom kluster yang diurutkan tersedia di SQL Server 2022 (16.x). Untuk informasi selengkapnya, lihat MEMBUAT INDEKS PENYIMPAN KOLOM dan Penyetelan performa dengan indeks penyimpan kolom berkluster yang diurutkan.

  • Predikat pushdown dengan penghapusan grup baris penyimpan kolom berkluster dari string menggunakan nilai batas untuk mengoptimalkan pencarian string. Semua indeks penyimpan kolom mendapat manfaat dari eliminasi segmen yang ditingkatkan berdasarkan jenis data. Dimulai dengan SQL Server 2022 (16.x), kemampuan eliminasi segmen ini diperluas ke jenis data string, biner, dan guid, dan jenis data datetimeoffset untuk skala yang lebih besar dari dua. Sebelumnya, penghapusan segmen penyimpan kolom hanya diterapkan ke jenis data numerik, tanggal, dan waktu, dan jenis data datetimeoffset dengan skala kurang dari atau sama dengan dua. Setelah memutakhirkan ke versi SQL Server yang mendukung penghapusan segmen string min/maks (SQL Server 2022 (16.x) dan versi yang lebih baru), indeks penyimpan kolom tidak akan menguntungkan fitur ini sampai dibangun kembali menggunakan REBUILD atau DROP/CREATE.

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 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 nonpersissis dalam indeks penyimpan kolom berkluster. Kolom komputasi yang dipertahankan tidak didukung dalam indeks penyimpan kolom berkluster. Anda tidak dapat membuat indeks penyimpan kolom non-kluster pada 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 nonclustered 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 nonclustered 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 diubah untuk distabilkan sebelum mengompresinya ke penyimpan kolom. Untuk detailnya, lihat MEMBUAT INDEKS COLUMNSTORE (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 ... REORGANIZE baris yang dihapus, berdasarkan kebijakan yang ditentukan secara internal, dari penyimpan kolom sebagai operasi online

  • Indeks penyimpan kolom dapat menjadi akses pada replika sekunder yang dapat dibaca AlwaysOn. Anda dapat meningkatkan performa untuk analitik operasional dengan membongkar kueri analitik ke replika sekunder AlwaysOn.

  • Pushdown agregat menghitung fungsi MINagregat , , MAX, SUM, COUNTdan AVG selama pemindaian tabel ketika jenis data menggunakan tidak lebih dari 8 byte, dan bukan jenis data string. Pushdown agregat didukung dengan atau tanpa GROUP BY klausul untuk indeks penyimpan kolom berkluster dan indeks penyimpan kolom tanpa kluster. Di SQL Server, peningkatan ini dicadangkan 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 LIKE yang menggunakan filter bitmap. Ini berfungsi dengan semua kolafeksi yang didukung. Di SQL Server, peningkatan ini dicadangkan untuk edisi Enterprise.

  • Penyempurnaan untuk operasi mode batch dengan memanfaatkan kemampuan perangkat keras berbasis vektor. Mesin Database mendeteksi tingkat dukungan CPU untuk ekstensi perangkat keras AVX 2 (Ekstensi Vektor Tingkat Lanjut) dan SSE 4 (Ekstensi SIMD Streaming 4), dan menggunakannya jika didukung. Di SQL Server, peningkatan ini dicadangkan 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/SUMCHECKSUM_AGG,STDEV/STDEVP
    • Fungsi agregat jendela: COUNT, , COUNT_BIG, SUM, AVGMIN, , MAXdanCLR
    • Agregat yang ditentukan pengguna jendela: CHECKSUM_AGG, , STDEV, STDEVP, VAR, VARPdan GROUPING
    • Fungsi analitik agregat jendela: LAG, , LEAD, FIRST_VALUE, LAST_VALUEPERCENTILE_CONT, PERCENTILE_DISC, CUME_DIST, danPERCENT_RANK
  • Kueri berutas tunggal yang berjalan di bawah MAXDOP 1 atau dengan rencana kueri serial dijalankan dalam mode batch. Sebelumnya, hanya kueri multi-utas yang dijalankan dengan eksekusi batch.

  • Kueri tabel memori yang dioptimalkan dapat memiliki paket paralel dalam mode SQL InterOp 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 dapat 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.

Masalah umum

Berlaku untuk: SQL Server, Azure SQL Database, Azure SQL Managed Instance, kumpulan SQL khusus Azure Synapse Analytics

  • Saat ini, kolom LOB (varbinary(max), varchar(max), dan nvarchar(max)) di segmen penyimpan kolom terkompresi tidak terpengaruh oleh DBCC SHRINKDATABASE dan DBCC SHRINKFILE.

SQL Server 2014 (12.x)

SQL Server 2014 (12.x) memperkenalkan indeks penyimpan kolom berkluster sebagai format penyimpanan utama. Ini memungkinkan pemuatan reguler serta memperbarui, menghapus, dan menyisipkan operasi.

  • Tabel dapat menggunakan indeks penyimpan kolom berkluster sebagai penyimpanan tabel utama. Tidak ada indeks lain yang diizinkan pada tabel, tetapi indeks penyimpan kolom berkluster dapat diperbarui sehingga Anda dapat melakukan pemuatan reguler dan membuat perubahan pada baris individual.
  • Indeks penyimpan kolom non-kluster terus memiliki fungsionalitas yang sama seperti di 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 penyimpan kolom berkluster dan non-kluster memiliki opsi kompresi pengarsipan 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 yang tidak terdaftar sebagai jenis indeks lain pada tabel rowstore dan pemrosesan batch untuk kueri pada data penyimpan kolom.

  • Tabel rowstore dapat memiliki satu indeks penyimpan kolom nonclustered.
  • Indeks penyimpan kolom bersifat baca-saja. Setelah membuat indeks penyimpan kolom, Anda tidak dapat memperbarui tabel dengan INSERT, , DELETEdan UPDATE operasi; 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 penyimpan kolom selalu memerlukan penyimpanan tambahan, biasanya tambahan 10% daripada rowstore, karena menyimpan salinan data.
  • Pemrosesan batch menyediakan performa kueri 2x atau lebih baik, tetapi hanya tersedia untuk eksekusi kueri paralel.