Tôi có yêu cầu tìm kiếm một số bảng khác nhau trong cơ sở dữ liệu SQL Server của mình. Và tôi cần phải sắp xếp các kết quả dựa trên bảng mà trận đấu xảy ra.Tối ưu hóa tìm kiếm toàn văn bản trên nhiều bảng
Cách tiếp cận tôi đã thực hiện được hiển thị bên dưới. Tuy nhiên, điều này dường như không hiệu quả lắm khi lượng dữ liệu tăng lên.
Có ai có thể đề xuất bất kỳ thủ thuật nào để tối ưu hóa điều này không?
-- Full-text query
DECLARE @FtsQuery nvarchar(100)
SET @FtsQuery = 'FORMSOF(INFLECTIONAL, detail)'
-- Maximum characters in description column
DECLARE @MaxDescription int
SET @MaxDescription = 250
SELECT 1 AS RankGroup, FTS.Rank, Id, Title, LEFT([Description], @MaxDescription) AS Description FROM Table1
INNER JOIN CONTAINSTABLE(Table1, *, @FtsQuery) AS FTS ON FTS.[KEY] = Table1.Id
UNION SELECT 2, FTS.Rank, Id, Title, NULL FROM Table2
INNER JOIN CONTAINSTABLE(Table2, *, @FtsQuery) AS FTS ON FTS.[KEY] = Table2.Id
UNION SELECT 3, FTS.Rank, Id, Title, LEFT([Description], @MaxDescription) FROM Table3
INNER JOIN CONTAINSTABLE(Table3, *, @FtsQuery) AS FTS ON FTS.[KEY] = Table3.Id
UNION SELECT 4, FTS.Rank, Id, Title, LEFT([Description], @MaxDescription) FROM Table4
INNER JOIN CONTAINSTABLE(Table4, *, @FtsQuery) AS FTS ON FTS.[KEY] = Table4.Id
UNION SELECT 5, FTS.Rank, Id, Title, LEFT([Description], @MaxDescription) FROM Table5
INNER JOIN CONTAINSTABLE(Table5, *, @FtsQuery) AS FTS ON FTS.[KEY] = Table5.Id
ORDER BY RankGroup, Rank DESC
Một ý tưởng tôi muốn xem là tạo chế độ xem được lập chỉ mục và sau đó thực hiện tìm kiếm trên chế độ xem. Nhưng kể từ khi xem sẽ cần những UNION
s, thật khó để xem nó sẽ hiệu quả hơn thế nào.
Một tối ưu hóa đơn giản mà bạn có thể thực hiện một cách an toàn là thay thế 'UNION' bằng 'UNION ALL'. Để biết thêm thông tin: http://stackoverflow.com/questions/49925/what-is-the-difference-between-union-and-union-all – niaher