Apa yang baru dalam indeks penyimpan kolom

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsGudang data di Microsoft FabricDatabase SQL di Microsoft Fabric

Pelajari tentang fitur penyimpan kolom mana yang tersedia di seluruh platform SQL dan versi SQL Server.

Ringkasan fitur untuk rilis produk

Tabel ini meringkas fitur utama untuk indeks penyimpanan kolom dan produk di mana mereka tersedia.

Untuk ketersediaan fitur di Azure SQL Managed Instance dengan kebijakan pembaruan SQL Server, lihat kolom untuk versi SQL Server yang sesuai.

Fitur Indeks Columnstore SQL Server 2016 (13.x)1 SQL Server 2017 (14.x) SQL Server 2019 (15.x) SQL Server 2022 (16.x) SQL Server 2025 (17.x) Azure SQL Database2 dan Azure SQL Managed InstanceAUTD Azure Synapse Analytics dan Pergudangan di Microsoft Fabric
Eksekusi mode batch untuk kueri multi-utas3 Yes Yes Yes Yes Yes Yes Yes
Eksekusi mode batch untuk kueri berutas tunggal Yes Yes Yes Yes Yes Yes Yes
Opsi pengompresan arsip Yes Yes Yes Yes Yes Yes Yes
Isolasi snapshot dan isolasi snapshot dengan baca terkunci Yes Yes Yes Yes Yes Yes Yes
Tentukan indeks penyimpan kolom saat membuat tabel Yes Yes Yes Yes Yes Yes Yes
Always On mendukung indeks penyimpan kolom 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
Sekunder yang dapat dibaca dalam Always On mendukung indeks kolom penyimpanan yang dapat diperbarui Yes Yes Yes Yes Yes Tidak. Tidak.
Indeks kolom penyimpanan nonkluster hanya baca pada tumpukan atau pohon B Ya4 Ya4 Ya4 Ya4 Ya4 Ya4 Ya4
Indeks penyimpan kolom nonclustered yang dapat diperbarui pada tumpukan atau pohon B Yes 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
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 Yes
Indeks penyimpan kolom pada tabel yang dioptimalkan memori Yes Yes Yes Yes Yes Yes Yes
Definisi indeks penyimpan kolom non-kluster mendukung penggunaan kondisi yang difilter Yes Yes Yes Yes Yes Yes Yes
Opsi penundaan kompresi untuk indeks penyimpan kolom di CREATE TABLE dan ALTER TABLE Yes Yes Yes Yes Yes Yes Yes
Dukungan untuk jenis nvarchar(maks) Tidak. Yes Yes Yes Yes Yes No5
Indeks penyimpan kolom dapat memiliki kolom komputasi yang tidak bertahan Tidak. Yes Yes Yes Yes Tidak. Tidak.
Dukungan penggabungan latar belakang untuk pemindah tuple Tidak. Tidak. Yes Yes Yes Yes Yes
Indeks penyimpanan kolom berkluster yang diurutkan Tidak. Tidak. Tidak. Yes Yes Yes Yes
Indeks penyimpan kolom non-kluster yang diurutkan Tidak. Tidak. Tidak. Tidak. Yes Yes Tidak.
Pembuatan dan pembaruan indeks penyimpan kolom online Tidak. Tidak. Tidak. Yes Yes Yes Tidak.
Indeks kolom tersimpan dibuat dan dibangun ulang secara online Tidak. Tidak. Tidak. Tidak. Yes Yes Tidak.

1 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 Untuk Azure SQL Database, indeks penyimpan kolom tersedia di tingkat DTU Premium, tingkat Standar DTU - S3 ke atas, dan semua tingkat vCore. 3 Tingkat paralelisme (DOP) untuk mode batch operasi 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. 4 Untuk membuat indeks penyimpan kolom non-kluster baca-saja, simpan indeks pada grup file baca-saja. 5 Tidak didukung di kumpulan SQL khusus tetapi didukung di kumpulan SQL tanpa server.

SQL Server 2025 (17.x)

SQL Server 2025 (17.x) menambahkan fitur-fitur berikut:

  • Penyimpan kolom non-kluster yang diurutkan meningkatkan performa kueri dalam analitik operasional real time.

    Untuk informasi selengkapnya, lihat penyetelan kinerja dengan indeks penyimpan kolom yang diurutkan.

  • Indeks penyimpan kolom yang diurutkan (baik berkluster atau tidak terkluster) sekarang dapat dibuat atau dibangun kembali secara online.

    Anda dapat menentukan ONLINE = ON dalam CREATE INDEX pernyataan saat ORDER klausul ada. Untuk informasi selengkapnya tentang operasi indeks online, lihat Melakukan operasi indeks secara online.

  • Kualitas pengurutan yang ditingkatkan untuk indeks penyimpan kolom berkluster yang diurutkan.

    Di SQL Server 2025 (17.x), ketika indeks penyimpan kolom berkluster yang diurutkan dibangun secara online, algoritma pengurutan menggunakan tempdb alih-alih mengurutkan data dalam memori. Jika MAXDOP untuk build indeks adalah 1, maka build akan menghasilkan indeks columnstore berkluster yang sepenuhnya terurut dan tidak memiliki segmen yang tumpang tindih. Ini dapat meningkatkan performa kueri menggunakan indeks. Namun, pembangunan indeks mungkin memakan waktu lebih lama karena I/O tambahan yang diperlukan untuk menuangkan ke tempdb. Jika indeks penyimpan kolom berkluster sudah ada, kueri dapat terus menggunakannya saat pembangunan ulang indeks online yang sepenuhnya dipesan sedang berlangsung.

    Untuk informasi selengkapnya, lihat Mengurangi tumpang tindih segmen dan meningkatkan performa kueri.

  • Peningkatan database dan operasi penyusutan file.

    Dalam versi SQL Server sebelumnya, ketika indeks penyimpan kolom berkluster menyertakan kolom apa pun dengan jenis data LOB seperti varchar(max), nvarchar(max), varbinary(max), halaman data yang digunakan oleh kolom ini tidak dapat dipindahkan oleh operasi penyusutan. Akibatnya, penyusutan mungkin tidak akan terlalu efektif dalam memulihkan kembali ruang dalam file data.

    Di SQL Server 2025 (17.x), perintah DBCC SHRINKDATABASE dan DBCC SHRINKFILE dapat memindahkan halaman data yang digunakan oleh kolom LOB di indeks penyimpan kolom.

SQL Server 2022 (16.x)

SQL Server 2022 (16.x) menambahkan fitur-fitur berikut:

  • Indeks penyimpan kolom berkluster yang diurutkan meningkatkan performa untuk kueri berdasarkan predikat kolom yang diurutkan. Indeks penyimpan kolom yang diurutkan dapat meningkatkan performa dengan mengabaikan segmen data sepenuhnya. Ini dapat secara drastis mengurangi IO yang diperlukan untuk menyelesaikan kueri pada data penyimpan kolom. Untuk informasi selengkapnya, lihat penghapusan segmen. Untuk informasi selengkapnya, lihat CREATE COLUMNSTORE INDEX dan Penyetelan performa dengan indeks penyimpan kolom yang diurutkan.
  • Predikat pushdown dengan penghapusan grup baris penyimpan kolom berkluster dari string menggunakan nilai batas untuk mengoptimalkan pencarian string. Semua indeks kolom mendapat manfaat dari peningkatan penghapusan segmen berdasarkan jenis data. Dimulai dengan SQL Server 2022 (16.x), kemampuan eliminasi segmen ini diperluas ke jenis data string, biner, dan GUID, serta jenis data datetimeoffset untuk skala lebih besar dari dua. Sebelumnya, eliminasi segmen pengimporan kolom hanya berlaku untuk tipe data numerik, tanggal dan waktu, dan tipe data datetimeoffset dengan skala kurang dari atau sama dengan dua. Setelah meningkatkan 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 mendapat manfaat dari fitur ini sampai dibangun kembali menggunakan ALTER INDEX REBUILD atau CREATE INDEX WITH (DROP_EXISTING = ON).
  • Penghapusan grup baris penyimpan kolom untuk awalan predikat LIKE, misalnya column LIKE 'string%'. Penghapusan segmen tidak didukung untuk penggunaan LIKE yang bukan awalan seperti column LIKE '%string'.
  • Untuk informasi selengkapnya tentang fitur tambahan, lihat Apa yang baru di SQL Server 2022.

SQL Server 2019 (15.x)

SQL Server 2019 (15.x) menambahkan fitur baru ini:

Functional

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 columnstore dari waktu ke waktu.

SQL Server 2017 (14.x)

SQL Server 2017 (14.x) menambahkan fitur baru ini.

Functional

  • SQL Server 2017 (14.x) mendukung kolom komputasi nonpersissis dalam indeks penyimpan kolom berkluster. Kolom terhitung yang diawetkan 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.

Functional

  • 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. 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 nonclustered. SQL Server secara otomatis mempertahankan indeks nonclustered untuk operasi DML.

  • Dukungan untuk kunci primer dan kunci asing dengan menggunakan indeks B-tree untuk memastikan batasan tersebut 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 mengompresnya ke dalam penyimpanan kolom. Untuk detailnya, lihat CREATE COLUMNSTORE INDEX dan Mulai menggunakan indeks penyimpan kolom untuk analitik operasional real time.

Performa untuk tingkat kompatibilitas database 120 atau 130

  • Indeks Columnstore mendukung tingkat isolasi cuplikan baca berkomitmen (RCSI) dan isolasi cuplikan (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 ALTER INDEX ... REORGANIZE menghapus entri yang sudah dihapus dari columnstore sebagai operasi online, berdasarkan kebijakan yang ditentukan secara internal.

  • Indeks penyimpan kolom dapat diakses pada replika sekunder yang dapat dibaca dalam Always On. Anda dapat meningkatkan performa untuk analitik operasional dengan mengalihkan kueri analitik ke replika sekunder Always On.

  • Pushdown agregat menghitung fungsi agregat MIN, MAX, SUM, COUNT, dan 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.

  • Predikat String Pushdown 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 kolasi 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, dan PERCENT_RANK
  • Kueri berutas tunggal yang berjalan di bawah MAXDOP 1 atau dengan rencana kueri serial dijalankan dalam mode batch. Sebelumnya, hanya kueri multi-thread yang dijalankan dengan eksekusi batch.

  • Dalam mode SQL InterOp, kueri tabel yang telah dioptimalkan untuk memori dapat memiliki rencana paralel, baik saat mengakses data dalam penyimpanan baris maupun dalam indeks penyimpanan kolom.

Supportability

Tampilan sistem ini adalah baru untuk columnstore:

DMV berbasis OLTP dalam memori ini berisi pembaruan untuk penyimpan kolom:

Limitations

  • 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 kompilasi asli. Eksekusi paralel didukung.

Masalah yang diketahui

Berlaku untuk: SQL Server 2022 (16.x) dan versi yang lebih lama, Azure SQL Managed Instance2022

  • Halaman data yang digunakan oleh kolom LOB (varbinary(max), varchar(max), dan nvarchar(max)) di segmen penyimpan kolom terkompresi tidak dapat dipindahkan oleh DBCC SHRINKDATABASE dan DBCC SHRINKFILE. Masalah ini diselesaikan di SQL Server 2025 (17.x).

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 ulang, dan menggunakan pertukaran partisi. Indeks penyimpan kolom non-kluster hanya didukung pada tabel berbasis disk, dan bukan pada tabel dalam memori.
  • Indeks penyimpanan kolom berkluster dan nonberkluster memiliki opsi kompresi pengarsipan yang lebih lanjut memampatkan 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 beroperasi 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 columnstore yang tidak terklaster sebagai jenis indeks lain pada tabel rowstore dan pemrosesan batch untuk kueri pada data columnstore.

  • Tabel penyimpanan baris dapat memiliki satu indeks penyimpan kolom nonclustered.
  • Indeks penyimpan kolom bersifat hanya baca. 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.