Meningkatkan kinerja teks lengkap query di SQL Server

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 2549443 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Ringkasan

Artikel ini menjelaskan sebuah metode untuk meningkatkan kinerja permintaan Microsoft SQL Server yang menggunakan pencarian teks lengkap predikat (seperti berisi dan CONTAINSTABLE) dan yang juga menyaring data. Sebagai contoh, metode ini meningkatkan kinerja dari query berikut:
select * from dbo.ftTest where CONTAINS(TextData, '"keyword"') and CDate > @date
Metode ini memungkinkan Anda desain query, skema Daftar Tabel dan indeks teks lengkap sedemikian rupa bahwa mesin pencarian teks lengkap menyaring hasil sebelum mereka dikirim ke mesin relasional. Oleh karena itu, Mesin relasional tidak memiliki untuk menyaring dataset besar.

Informasi lebih lanjut

Bila Anda membuat pertanyaan pencarian teks lengkap, prinsip faktor yang mempengaruhi kinerja dari query adalah jumlah data yang lengkap-teks pencarian mesin harus melakukan proses sebelum sisa data akan dikirim ke mesin relasional. Dalam SQL Server, Anda dapat meningkatkan kinerja dari query oleh menyaring baris awal untuk mengurangi jumlah baris yang harus diproses kemudian.

Dalam versi SQL Server yang dirilis sebelum SQL Server 2008, mesin pencarian teks lengkap kembali semua baris yang cocok dengan istilah penelusuran, dan kemudian mesin relasional berlaku Filter. Perbaikan perilaku ini dibuat dalam SQL Server 2008, SQL Server 2008 R2 dan di SQL Server 2012. Namun, sulit untuk menggunakan perbaikan ini karena indeks pencarian teks lengkap disusun sangat berbeda dari database indeks. Selain itu, mesin pencarian teks lengkap dan mesin relasional bekerja sangat berbeda. Oleh karena itu, metode yang artikel ini menjelaskan menggunakan Table-Valued fungsi (TVF) untuk menyaring baris awal dan mengurangi jumlah baris yang harus diproses kemudian.

Misalnya, rencana query berikut gulung balik baris 131051 yang cocok dengan string pencarian berisi. Selain itu, operator bergabung dalam rencana melakukan penyaringan tambahan dengan menggunakan Telisik indeks.
Rows StmtText 
-------------------- -----------------------------------------------------------------------------------------------------------
1167 select CDate, ID from dbo.fttest where contains (c2, '"create"') and CDate> '08/05/2019' 

1167 |--Merge Join(Left Semi Join, MERGE:([FTSdb].[dbo].[fttest].[ID])=(FulltextMatch.[docid]), RESIDUA
5858 |--Sort(ORDER BY:([FTSdb].[dbo].[fttest].[ID] ASC)) 
5858 | |--Clustered Index Seek(OBJECT:([FTSdb].[dbo].[fttest].[clidx1]), SEEK:([FTSdb].[
131051 |--Table-valued function 
Namun, jika query mencakup kolom bukti kunci indeks unik teks lengkap sebagai predikat, Mesin lengkap-teks pencarian dapat menggunakan predikat untuk menyaring hasil di tingkat teks lengkap. Dalam situasi ini, TVF kembali jumlah yang jauh lebih kecil dari data sebelum penyaringan tambahan harus diterapkan. Sebagai contoh, query berikut menentukan lima nilai yang harus sesuai kondisi c2, dan TVF kembali hanya hasil yang sesuai dengan nilai-nilai lima:
Rows StmtText 

-------- ---------------------------------------------------------------------------------------------------------------------------------
5 select CDate, ID from dbo.fttest where contains (c2, '"create"') and CDate > '08/05/2019' and ID in ( 654051, 644051, 649106, 465, 105)

5 |--Nested Loops(Left Semi Join, OUTER REFERENCES:([FTSdb].[dbo].[fttest].[ID])) 
5 |--Index Seek(OBJECT:([FTSdb].[dbo].[fttest].[idx1]), SEEK:([FTSdb].[dbo].[fttest].[ID]=(105) OR ...
5 |--Table-valued function
Mesin pencarian teks lengkap kemampuan untuk menekan nilai-nilai yang digunakan oleh bukti kunci indeks unik adalah dasar dari metode berikut.

Jika sebuah predikat berisi kolom jenis DateTime data, Anda dapat menyertakan informasi terkini di kolom bukti kunci indeks unik sehingga hanya baris yang sesuai dengan predikat ini dikeluarkan. Untuk melakukan ini, Anda harus secara logis menggabungkan informasi tanggal di kolom bukti kunci. Namun, Anda mungkin juga harus mengubah tipe data bukti kunci kolom dan aplikasi yang menggunakan query.

Untuk menerapkan metode, mengubah data jenis teks lengkap unik bukti kunci ID untuk BIGINT. 4 Byte pertama merebut ID bukti kunci tahun, bulan, dan nilai-nilai tanggal dari kolom tanggal, dan 4 byte terakhir tetap sama. Sebagai contoh, byte pertama bukti kunci ID bisa merujuk ke tahun, byte berikutnya dapat merujuk kepada bulan, dan dua byte terakhir bisa mengacu kepada tanggal. Aplikasi harus mengakomodasi perubahan data tipe ini.

Kemudian, menerjemahkan berbagai predikat untuk predikat tombol tekan ID. Misalnya, "x<>< y"="" range="" predicate="" can="" be="" translated="" to="" the="" "(x*2^32="">< id="">< y*2^32)"="" predicate.="" because="" the="" translated="" predicate="" is="" a="" predicate="" on="" the="" full-text="" key,="" the="" predicate="" will="" be="" pushed="" down="" into="" the="" full-text="" streaming="" table-valued="" functions="" (stvf).="" this="" behavior="" effectively="" performs="" searches="" within="" the="" date="">

Properti

ID Artikel: 2549443 - Kajian Terakhir: 22 Maret 2013 - Revisi: 2.0
Berlaku bagi:
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Enterprise Evaluation
  • Microsoft SQL Server 2008 R2 Datacenter
  • Microsoft SQL Server 2008 R2 Developer
  • Microsoft SQL Server 2008 R2 Enterprise
  • Microsoft SQL Server 2008 R2 Standard
  • Microsoft SQL Server 2012 Developer
  • Microsoft SQL Server 2012 Standard
  • Microsoft SQL Server 2012 Web
  • Microsoft SQL Server 2012 Enterprise
Kata kunci: 
kbmt KB2549443 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini: 2549443

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com