Saya kinerja menyetel gudang data menggunakan indeks. Saya cukup baru untuk SQL Server 2014.Microsoft menjelaskan hal berikut:
"Kami melihat indeks columnstore berkerumun sebagai standar untuk menyimpan tabel fakta pergudangan data besar, dan berharap itu akan digunakan dalam sebagian besar skenario penyimpanan data. Karena indeks columnstore berkerumun dapat diperbarui, beban kerja Anda dapat melakukan sejumlah besar penyisipan, memperbarui, dan hapus operasi. " http://msdn.microsoft.com/en-us/library/gg492088.aspx
Namun jika Anda membaca lebih lanjut dalam dokumentasi Anda akan menemukan di bawah batasan dan batasan:
"Tidak dapat memiliki batasan unik, batasan kunci primer, atau batasan kunci asing."
Ini banyak membingungkan saya! Ini adalah praktik yang baik (tidak wajib) untuk memiliki kunci asing di gudang data karena berbagai alasan (integritas data, hubungan yang terlihat untuk lapisan semantik ...)
Jadi Microsoft menganjurkan indeks kolomstore berkerumun untuk skenario gudang data; Namun, tidak dapat menangani hubungan kunci asing ?!
Apakah saya benar dalam hal ini? Pendekatan lain mana yang akan Anda sarankan? Di masa lalu, saya telah menggunakan indeks columnstore nonclustered dalam skenario data warehouse, dengan drop dan membangun kembali untuk memuat data. Namun SQL Server 2014 lalu menambahkan tidak ada nilai baru nyata untuk gudang data ??
sumber
Jawaban:
Anda punya banyak pertanyaan di sini:
T: (Kekurangan kunci asing) banyak membingungkan saya! Ini adalah praktik yang baik (tidak wajib) untuk memiliki Fk di DWH karena berbagai alasan (integritas data, hubungan terlihat untuk lapisan semantik, ....)
A: Benar, biasanya merupakan praktik yang baik untuk memiliki kunci asing di gudang data. Namun, indeks kolomstore berkerumun belum mendukung itu.
T: Jadi MS mengadvokasi indeks toko Clustered Column untuk skenario DWH, Namun tidak dapat menangani hubungan FK ?!
A: Microsoft memberi Anda alat. Terserah Anda bagaimana Anda menggunakan alat-alat itu.
Jika tantangan terbesar Anda adalah kurangnya integritas data di gudang data Anda, maka alat yang Anda inginkan adalah tabel konvensional dengan kunci asing.
Jika tantangan terbesar Anda adalah kinerja kueri, dan Anda bersedia untuk memeriksa integritas data Anda sendiri sebagai bagian dari proses pemuatan, maka alat yang Anda inginkan dikelompokkan indeks toko kolom.
T: Namun SQL 2014 daripada menambahkan tidak ada nilai baru nyata untuk DWH ??
A: Untungnya, clustered columnstore bukan satu-satunya fitur baru di SQL Server 2014. Sebagai contoh, periksa penduga kardinalitas baru.
T: Mengapa saya begitu marah dan pahit tentang cara fitur favorit saya diimplementasikan?
A: Anda menangkap saya - Anda tidak benar-benar mengajukan pertanyaan itu - tetapi saya tetap akan menjawabnya. Selamat datang di dunia perangkat lunak pihak ketiga di mana tidak semua dibangun sesuai dengan spesifikasi persis Anda. Jika Anda merasa bersemangat tentang perubahan yang ingin Anda lihat dalam produk Microsoft, lihat Connect.Microsoft.com . Ini adalah proses umpan balik mereka di mana Anda dapat mengirimkan perubahan, orang lain dapat memilihnya, dan kemudian tim produk membacanya dan memberi tahu Anda mengapa mereka tidak akan menerapkannya. Terkadang. Sebagian besar waktu mereka hanya menandainya sebagai "tidak akan diperbaiki, bekerja pada mesin saya" tapi hei, kadang-kadang Anda mendapatkan jawaban.
sumber
Saya bisa mengerti bahwa Anda merasakan beberapa bagian yang biasa Anda lewatkan. Tapi itu hanya karena mereka hilang.
Meskipun demikian, SQL Server berhasil digunakan ketika Foreign Keys hanya sebuah konsep (yang kami terapkan melalui pemicu pada masa itu), bukan implementasi fisik seperti kendala. Integritas Deklaratif Referensi ada setidaknya di SQL Server 7.0, tetapi jauh lebih lemah daripada implementasi saat ini.
Mengenai nilai Indeks ColumnStore Clustered itu memberikan indeks dan baris dapat diperbarui. Anda mungkin menemukan diskusi ini berharga: http://sqlwithmanoj.com/2014/07/24/maintaining-uniqueness-with-clustered-columnstore-index-sql-server-2014/
Manoj menunjukkan bahwa ada cara untuk membuat Tampilan Terindeks / Terwujud di atas tabel ini, dengan Clustering Key sebagai PK (kolom 1 dari tabel / tampilan). Apakah itu cocok untuk Anda, tentu saja, adalah keputusan yang harus Anda buat.
Tapi, seperti komentar Aaron Bertrand dan TomTom, ini semua tentang kinerja yang lebih baik. Jika Anda dapat mengelola masalah lain yang menjadi perhatian Anda (dan saya percaya bahwa mereka dapat dikelola) maka Anda mendapatkan beberapa manfaat. Jadi gunakan ColumnStore untuk apa yang dapat Anda lakukan dan kelola sendiri fitur yang hilang.
sumber
Pertanyaan ini berkaitan dengan SQL 2014, tetapi saya ingin memberikan informasi tambahan mengingat perubahan yang dibuat dalam SQL 2016 ke kolom indeks, karena mungkin sulit untuk memilah keterbatasan dalam versi yang berbeda dan pertanyaan ini masih muncul cukup tinggi di Google:
Untuk SQL 2016, Microsoft menjelaskan metode untuk menggunakan indeks btree nonclustered (yang sekarang dapat ditambahkan sebagai indeks sekunder pada tabelstore berkerumun kolom) untuk menegakkan batasan kunci asing, asalkan kendala ditambahkan sebelum indeks kolomstore: https: // docs .microsoft.com / en-us / sql / relational-databases / indexes / columnstore-indexes-design-guidance
Niko Neugebauer juga memiliki posting blog tentang ini; sebenarnya mungkin untuk secara langsung membuat batasan unik / asing pada tabel columnstore (saya telah menerapkan pendekatan ini dalam pekerjaan saya): http://www.nikoport.com/2015/09/15/columnstore-indexes-part-66- lebih-clustered-columnstore-perbaikan-di-sql-server-2016 /
sumber