Salah satu fitur baru dalam SQL Server 2012 dengan nama kode Denali
adalah indeks Columnstore.
Saya tahu sedikit tentang indeks toko baris lama biasa, seperti struktur b-tree, perbedaan penyimpanan antara level daun dan halaman b-tree, memengaruhi bidang yang disertakan, mengoptimalkan penggunaannya, urutan kunci, dll.
Saya mengalami kesulitan mendapatkan info bagus tentang internal indeks kolomstore.
- Bagaimana strukturnya?
- Apakah ada b-tree? Ada struktur lain di tempat?
- Bagaimana cara mengatur data?
- Apa jenis operator spesifik yang paling cocok untuk menggunakannya?
- Adakah anti-pola lain yang harus dihindari saat menggunakannya?
Banyak hal yang dapat saya ketahui tentang mereka pada dasarnya adalah kebalikan dari indeks "normal", yaitu tidak ada pemesanan kunci, tidak ada bidang yang disertakan, HANYA yang tidak tercakup.
Setiap wawasan dihargai.
Jawaban:
Struktur Toko Kolom
Data Columnstore disimpan secara fisik dalam satu segmen atau lebih (unit alokasi LOB reguler) per kolom, dan juga dapat dipartisi dengan cara yang biasa. Setiap segmen berisi sekitar satu juta baris nilai yang sangat dikompresi atau referensi nilai (beberapa teknik kompresi tersedia). Referensi nilai menghubungkan ke entri dalam satu hingga dua kamus hash .
Kamus disematkan dalam memori selama eksekusi kueri, dengan ID nilai data dari segmen yang dilihat dalam kamus setiap kali eksekusi membutuhkan nilai data aktual (pencarian ini ditangguhkan selama mungkin karena alasan kinerja).
Segmen juga memiliki catatan tajuk yang berisi metadata seperti nilai minimum dan maksimum yang disimpan di dalam segmen. Informasi dari header sering dapat digunakan untuk menghilangkan partisi lengkap dari pemrosesan pada waktu eksekusi. Informasi catatan tajuk disimpan dalam struktur akar data LOB yang biasa, sehingga menghilangkan segmen berarti Mesin Penyimpanan dapat melewatkan membaca halaman data LOB dari penyimpanan fisik sepenuhnya. Memaksimalkan potensi untuk eliminasi dapat memerlukan desain yang cermat , termasuk ketergantungan pada urutan indeks berkerumun pada saat indeks Columnstore dibangun.
Operator Paket Tertentu
SQL Server 2012 memperkenalkan mode eksekusi baru yang disebut Batch Mode. Dalam mode ini, paket sekitar 1000 baris dilewatkan di antara operator, secara signifikan meningkatkan efisiensi penggunaan prosesor. Dalam setiap paket, data berbentuk kolom direpresentasikan sebagai vektor. Tidak semua operator paket mendukung operasi mode batch, tetapi contoh dari mereka yang melakukan termasuk Pemindaian Indeks Columnstore, Hash Inner Join, Batch Hash Table Build, Filter Bitmap, Hash Aggregate (bukan skalar agregat), Filter, dan Compute Skalar (untuk proyeksi dan ekspresi evaluasi). Rencana pelaksanaan kueri telah ditingkatkan untuk menunjukkan mode eksekusi yang diperkirakan dan aktual.
Anti-Pola
Ada sejumlah besar pembatasan dalam rilis pertama, termasuk kendala pada tipe data yang diijinkan . Jenis yang paling umum didukung; tipe data yang tidak didukung termasuk
DECIMAL
dengan lebih presisi dari 18 digit,(N)VARCHAR(MAX)
,UNIQUEIDENTIFIER
, jenis CLR, dan(VAR)BINARY
.Penggunaan tipe string ,
OUTER JOIN
,IN
,EXISTS
,NOT IN
,OR
,UNION ALL
dapat mengakibatkan berkurang secara signifikan kinerja (Row eksekusi Mode), kecuali workarounds bekerja yang biasanya melibatkan penulisan ulang sintaks yang tidak biasa seperti yang ditunjukkan dalam artikel terkait di bagian ini.Informasi Lebih Lanjut
Remus Rusanu telah membuat blog ikhtisar yang luar biasa di sini .
sumber