Meningkatkan performa kueri teks lengkap

Berlaku untuk: SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Daftar rekomendasi berikut dapat membantu Anda meningkatkan performa kueri teks lengkap.

Sumber daya perangkat keras seperti memori, kecepatan disk, kecepatan CPU, dan arsitektur mesin dapat memengaruhi kinerja kueri teks lengkap.

  • Defragmentasi indeks tabel dasar dengan menggunakan ALTER INDEX REORGANIZE.

  • Mengatur ulang katalog teks lengkap dengan menggunakan ALTER FULLTEXT CATALOG REORGANIZE. Terlalu banyak fragmen indeks teks lengkap dapat menyebabkan penurunan substansial dalam performa kueri. Pernyataan ini menggabungkan semua fragmen menjadi satu fragmen yang lebih besar per indeks, menghapus semua informasi kejadian kedaluwarsa. Pastikan Anda menjalankan pernyataan ini sebelum pengujian kinerja karena menjalankan pernyataan ini akan memicu master merge pada indeks full-text di katalog tersebut.

  • Batasi kolom kunci teks lengkap pilihan Anda ke kolom kecil. Meskipun kolom 900 byte didukung, gunakan kolom kunci yang lebih kecil dalam indeks teks lengkap. int dan bigint memberikan performa terbaik.

  • Menggunakan kunci full-text bilangan bulat menghindari operasi penggabungan dengan tabel pemetaan docid, yang meningkatkan kinerja kueri dan perayapan. Peningkatan performa tambahan dimungkinkan jika kunci teks lengkap juga merupakan kunci indeks berkluster.

  • Gabungkan beberapa predikat CONTAINS menjadi satu CONTAINS predikat. Di SQL Server, Anda dapat menentukan daftar kolom dalam CONTAINS kueri.

  • Jika Anda hanya memerlukan informasi kunci atau peringkat pencarian teks lengkap, gunakan CONTAINSTABLE atau FREETEXTTABLE alih-alih CONTAINS atau FREETEXT, masing-masing.

  • Untuk membatasi hasil dan meningkatkan kinerja, gunakan parameter top_n_by_rank dari fungsi FREETEXTTABLE dan CONTAINSTABLE. top_n_by_rank memungkinkan Anda untuk mengingat hanya hit yang paling relevan. Gunakan parameter ini hanya jika skenario bisnis Anda tidak memerlukan pengambilan semua hasil yang mungkin (yakni, tidak memerlukan total recall).

    Catatan

    Penarikan total biasanya diperlukan untuk skenario hukum, tetapi mungkin kurang penting daripada kinerja untuk skenario bisnis seperti bisnis elektronik.

  • Periksa rencana kueri teks lengkap untuk memastikan bahwa paket gabungan yang sesuai dipilih. Gunakan petunjuk join atau petunjuk kueri jika perlu. Jika parameter digunakan dalam kueri teks lengkap, nilai pertama kali parameter menentukan rencana kueri. Anda dapat menggunakan OPTIMIZE FORpetunjuk kueri untuk memaksa kueri mengkompilasi dengan nilai yang Anda inginkan. Ini membantu mencapai rencana kueri deterministik dan performa yang lebih baik.

  • Dalam pencarian teks lengkap, operator logis yang ditentukan dalam CONTAINSTABLE (AND, OR) dapat diimplementasikan baik sebagai gabungan Transact-SQL atau di dalam fungsi bernilai tabel streaming eksekusi teks lengkap (STVF). Biasanya, kueri dengan hanya satu jenis operator logis diimplementasikan murni dengan eksekusi teks lengkap, sedangkan kueri yang mencampur operator logis juga memiliki gabungan SQL. Implementasi operator logis di dalam eksekusi teks lengkap STVF menggunakan beberapa properti indeks khusus yang membuatnya jauh lebih cepat daripada gabungan SQL. Untuk alasan ini, jika memungkinkan, bingkai kueri Anda hanya menggunakan satu jenis operator logis.

  • Untuk aplikasi yang berisi predikat relasional selektif, kueri yang menggunakan predikat relasional selektif dan predikat teks lengkap tidak selektif mungkin berkinerja terbaik saat ditulis untuk menggunakan pengoptimal kueri. Pendekatan ini memungkinkan pengoptimal kueri untuk memutuskan apakah dapat memanfaatkan teknik pendorongan predikat atau rentang guna menghasilkan rencana kueri yang efektif. Pendekatan ini lebih sederhana dan sering lebih efisien daripada mengindeks data relasional sebagai data teks lengkap.

Pencarian Teks Lengkap SQL Server 2008: Mekanisme Internal dan Peningkatan