Katakanlah kita memiliki database 12 juta nama dan alamat yang perlu dicari menggunakan teks lengkap, tetapi setiap baris juga mengandung nilai integer, katakanlah COMPANYID
. Tabel ini berisi sekitar 250 PERUSAHAAN yang berbeda dari 12 juta baris itu.
Apakah mungkin, ketika mendefinisikan indeks teks lengkap, untuk memberikan masing COMPANY
-masing "cabang" di pohon?
company
sejauh ini, dan semua orang sangat menyukainya sehingga mereka ingin saya memproduksinya untuk semua perusahaan, dan saya belum punya kesempatan untuk membuat maket dengan 12 juta baris data boneka yang berarti namun. Nilai seperti "Lastname1", "Lastname2", "City1", dll tidak akan memiliki variasi yang cukup dan dapat mengubah hasil pengujian. Data berubah begitu sering sehingga saya tidak yakin SQL Server akan dapat dipercaya untuk mengetahui indeks mana yang lebih sempit dalam kueri yang diberikan, dan jumlah baris per perusahaan sangat bervariasi. Satu perusahaan mungkin hanya memiliki 1000 baris, 60.000 lainnya.Jawaban:
Tidak adalah jawaban singkatnya, dan Anda tidak benar-benar membutuhkan ini. Indeks teks lengkap adalah indeks terbalik sehingga mereka menyimpan kata-kata split oleh doc_id unik yang harus Anda tentukan saat membuat indeks teks lengkap. Ini harus berupa "kolom unik, tombol tunggal, tidak dapat dibatalkan" idealnya bilangan bulat. Apa yang pada dasarnya kunci asing tidak diketahui dan tidak ada cara mudah untuk mempartisi mereka atas dasar itu.
Anda bisa menipu sesuatu seperti ini dengan tabel per perusahaan dan indeks teks lengkap per tabel. Anda akan membutuhkan semacam logika kode yang duduk di depan untuk menentukan tabel mana yang akan disisipkan / diambil. Ini akan menjadi sakit kepala yang cukup untuk mengelola hampir pasti tidak sepadan.
Jika Anda memiliki volume serius (misalnya lebih dari 23 miliar catatan) maka Anda dapat melihat solusi yang sulit, misalnya sesuatu seperti Azure VM per perusahaan dengan aplikasi yang duduk di depan mereka untuk menentukan mesin mana yang akan dihubungkan. Tetapi jelas Anda juga tidak membutuhkannya.
Ada juga sejumlah perbaikan dalam SQL 2008 untuk teks lengkap yang sekarang lebih terintegrasi ke dalam mesin basis data. Satu skenario, di mana Anda menentukan klausa WHERE terhadap kolom normal dan menggunakan fungsi teks lengkap, disebut sebagai 'Permintaan Campuran' dan dibahas di sini . Ini masih merupakan artikel yang hebat meskipun informasinya untuk SQL 2008.
Jika Anda umumnya mengkhawatirkan kinerja dan rencana, mengapa tidak memutar beberapa data uji, perkenalkan beberapa kemiringan, dan cobalah. Saya mengetuk skrip ini dengan ~ 2 juta baris dalam beberapa menit:
sumber