Cải thiện hiệu suất của các văn bản đầy đủ truy vấn trong SQL Server

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này: 2549443
Tóm tắt
Bài viết này mô tả một phương pháp để cải thiện hiệu suất truy vấn Microsoft SQL Server sử dụng tra cứu văn bản đầy đủ predicates (chẳng hạn như chứa CONTAINSTABLE) và đó cũng lọc dữ liệu. Ví dụ, phương pháp này cải thiện hiệu suất của truy vấn sau đây:
select * from dbo.ftTest where CONTAINS(TextData, '"keyword"') and CDate > @date
Phương pháp này cho phép bạn thiết kế các truy vấn, lược đồ bảng, và văn bản đầy đủ chỉ trong một cách mà các mô tơ tìm kiếm văn bản đầy đủ bộ lọc ra kết quả trước khi chúng được gửi đến cơ quan hệ. Vì vậy, các động cơ quan hệ không phải lọc một tập dữ liệu lớn.
Thông tin thêm
Khi bạn tạo một truy vấn tìm kiếm văn bản đầy đủ, các yếu tố nguyên tắc ảnh hưởng đến hiệu suất của các truy vấn là số lượng dữ liệu công cụ văn bản đầy đủ tra cứu phải xử lý trước khi phần còn lại dữ liệu được gửi đến cơ quan hệ. Trong SQL Server, bạn có thể cải thiện hiệu suất của các truy vấn bằng cách lọc ra hàng đầu để giảm số lượng hàng mà phải được xử lý sau này.

Trong phiên bản của SQL Server đã được phát hành trước khi SQL Server 2008, công cụ văn bản đầy đủ tra cứu trả về tất cả các hàng phù hợp với cụm từ tra cứu, và sau đó động cơ quan hệ áp dụng bất kỳ bộ lọc. Cải tiến cho hành vi này được thực hiện trong SQL Server 2008, SQL Server 2008 R2 và SQL Server 2012. Tuy nhiên, nó là khó khăn để sử dụng các cải tiến này bởi vì toàn bộ nội dung tra cứu chỉ số được tổ chức rất khác nhau từ bộ máy cơ sở dữ liệu chỉ số. Ngoài ra, các động cơ tra cứu văn bản đầy đủ và động cơ quan hệ làm việc rất khác nhau. Vì vậy, phương pháp mà bài viết này mô tả sử dụng Table-Valued chức năng (TVF) để lọc ra hàng đầu và để giảm bớt số lượng hàng mà phải được xử lý sau này.

Ví dụ, kế hoạch truy vấn sau đây trở về 131051 hàng phù hợp với một chuỗi tra cứu chứa. Ngoài ra, một nhà điều hành tham gia trong kế hoạch thực hiện bộ lọc bổ sung bằng cách sử dụng một mục chỉ dẫn tra cứu.
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]), RESIDUA5858 |--Sort(ORDER BY:([FTSdb].[dbo].[fttest].[ID] ASC)) 5858 | |--Clustered Index Seek(OBJECT:([FTSdb].[dbo].[fttest].[clidx1]), SEEK:([FTSdb].[131051 |--Table-valued function 
Tuy nhiên, nếu các truy vấn bao gồm các văn bản đầy đủ chỉ số duy nhất quan trọng cột là một predicate, các mô tơ tìm kiếm văn bản đầy đủ có thể dùng predicate để lọc các kết quả độ văn bản đầy đủ. Trong tình huống này, TVF trở lại một số lượng nhỏ hơn nhiều dữ liệu trước khi bộ lọc bổ sung phải được áp dụng. Ví dụ, truy vấn sau đây xác định giá trị năm phải phù hợp với điều kiện c2, và TVF trả lại chỉ những kết quả phù hợp với các giá trị năm:
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
Động cơ tra cứu văn bản đầy đủ khả năng để đẩy xuống các giá trị được sử dụng bởi duy nhất chỉ số chính là nền tảng của phương pháp sau.

Nếu một predicate có chứa một cột kiểu DateTime dữ liệu, bạn có thể bao gồm thông tin ngày trong cột quan trọng duy nhất mục chỉ dẫn để chỉ các hàng phù hợp với này predicate được phát ra từ. Để làm điều này, bạn phải hợp lý kết hợp thông tin ngày trong cột quan trọng. Tuy nhiên, bạn cũng có thể có để thay đổi kiểu dữ liệu cột quan trọng và các ứng dụng sử dụng các truy vấn.

Để thực hiện các phương pháp, thay đổi kiểu dữ liệu đầy đủ-đoạn độc đáo key ID để BIGINT. 4 Byte đầu tiên chụp ID chính năm, tháng và ngày giá trị từ cột ngày, và 4 byte cuối vẫn như cũ. Ví dụ, các byte đầu tiên của key ID có thể đề cập đến năm, các byte tiếp theo có thể đề cập đến tháng, và hai byte cuối có thể đề cập đến ngày. Các ứng dụng phải phù hợp với sự thay đổi kiểu dữ liệu này.

Sau đó, Dịch predicate phạm vi để một predicate trên phím của bạn. Ví dụ: "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="">

Cảnh báo: Bài viết này được dịch tự động

Thuộc tính

ID Bài viết: 2549443 - Xem lại Lần cuối: 03/22/2013 08:09:00 - Bản sửa đổi: 2.0

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

  • kbmt KB2549443 KbMtvi
Phản hồi