Bagikan melalui


Meningkatkan Performa Kueri Teks Lengkap

Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance

Daftar rekomendasi berikut akan membantu meningkatkan performa kueri teks lengkap.

Performa kueri teks lengkap juga dipengaruhi oleh sumber daya perangkat keras, seperti memori, kecepatan disk, kecepatan CPU, dan arsitektur mesin.

  • Defragmentasi indeks tabel dasar dengan menggunakan ALTER INDEX REORGANIZE.

  • Mengatur ulang katalog teks lengkap dengan menggunakan ALTER FULLTEXT CATALOG REORGANIZE. Pastikan Anda melakukan ini sebelum pengujian performa karena menjalankan pernyataan ini menyebabkan penggabungan master indeks teks lengkap dalam katalog tersebut.

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

  • Menggunakan kunci teks lengkap bilangan bulat menghindari gabungan dengan tabel pemetaan docid . Oleh karena itu, kunci teks lengkap bilangan bulat meningkatkan performa kueri dengan urutan besaran dan meningkatkan performa perayapan. Lebih banyak manfaat performa dapat mengakibatkan jika kunci teks lengkap juga merupakan kunci indeks berkluster.

  • Gabungkan beberapa predikat CONTAINS ke dalam satu predikat CONTAINS. Di SQL Server Anda bisa menentukan daftar kolom dalam kueri CONTAINS.

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

  • Untuk membatasi hasil dan meningkatkan performa, gunakan parameter top_n_by_rank 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 penarikan kembali semua kemungkinan temuan (yaitu, tidak memerlukan pengenalan total).

    Catatan

    Pengenalan total biasanya diperlukan untuk skenario hukum tetapi mungkin kurang penting daripada performa untuk skenario bisnis seperti e-business.

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

  • Terlalu banyak fragmen indeks teks lengkap dalam indeks teks lengkap, dapat menyebabkan penurunan substansial dalam performa kueri. Untuk mengurangi jumlah fragmen, reorganisasi katalog teks lengkap dengan menggunakan opsi REORGANIZE dari pernyataan ALTER FULLTEXT CATALOGTransact-SQL. Pernyataan ini pada dasarnya menggabungkan semua fragmen ke dalam satu fragmen yang lebih besar dan menghapus semua entri usang dari indeks teks lengkap.

  • Dalam pencarian teks lengkap, operator logis yang ditentukan dalam CONTAINSTABLE (AND, OR) dapat diimplementasikan baik sebagai gabungan SQL atau di dalam fungsi bernilai tabel streaming eksekusi teks lengkap (STVF). Biasanya, kueri dengan hanya satu jenis operator logis diimplementasikan murni oleh 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, kami menyarankan bahwa, jika memungkinkan, Anda membingkai kueri Anda hanya menggunakan satu jenis operator logis.

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

Pencarian Full-Text SQL Server 2008: Internal dan Peningkatan

Lihat juga

sys.dm_fts_memory_buffers (T-SQL)
sys.dm_fts_memory_pools (T-SQL)