Tôi đã có một chức năng tìm kiếm các bài báo mà trông như thế này (chứa hơn 5 mục tìm kiếm):T-SQL - Làm cách nào để tôi có thể thực hiện truy vấn SELECT với nhiều mệnh đề LIKE nhanh hơn?
SELECT TOP 5 *
FROM NewsArticles
WHERE (headline LIKE '% sustainable %'OR
headline LIKE '% sustainability %' OR
headline LIKE '% conservation %' OR
headline LIKE '% environmental % OR
headline LIKE '% environmentally %')
OR
(body LIKE '% sustainable %'OR
body LIKE '% sustainability %' OR
body LIKE '% conservation %' OR
body LIKE '% environmental % OR
body LIKE '% environmentally %')
ORDER BY publishDate DESC
Truy vấn này được thiết kế để kéo ra 5 câu chuyện tin tức hàng đầu liên quan đến phát triển bền vững và ngồi trên trang chủ về tính bền vững chính của tôi. Tuy nhiên, phải mất một lúc để chạy và trang tải chậm. Vì vậy, tôi đang tìm cách để tăng tốc độ này. Có rất nhiều điều khoản NHƯ dường như cồng kềnh vì vậy tôi đã thử một cái gì đó với lệnh JOIN như thế này:
CREATE TABLE #SearchItem (Search varchar(255))
INSERT INTO #SearchItem VALUES
('sustainable'),
('sustainability'),
('conservation'),
('environmental'),
('environmentally')
SELECT TOP 5 *
FROM NewsArticles as n
JOIN #SearchItem as s
ON n.headline COLLATE DATABASE_DEFAULT LIKE '% ' + s.Search + ' %' OR
n.body COLLATE DATABASE_DEFAULT LIKE '% ' + s.Search + ' %'
ORDER BY n.publishDate DESC
Điều này dường như làm việc rất tốt cho hiệu suất, nhưng dường như đôi khi mang lại điều trùng lặp mà một trong các từ tìm kiếm xuất hiện trong cả cơ thể và tiêu đề (thường là trường hợp). Tôi đã thử sử dụng từ này bằng cách sử dụng 'SELECT DISTINCT TOP 5 *' nhưng điều này cho tôi một lỗi nói 'Loại dữ liệu ntext không thể được chọn là DISTINCT vì nó không thể so sánh được'. Có phải dừng việc này từ việc mang lại các bản sao mà không thực hiện 2 tìm kiếm riêng biệt và sử dụng UNION không?
Tại sao nên sử dụng *? Bạn có cần cột ntext không? – Paparazzi
Đôi '%' trong câu lệnh 'like' của bạn là một trong những thủ phạm chính ... Bạn có cần thông tin này được cập nhật trong (gần) thời gian thực không? Nếu không, bạn có thể có một bảng tra cứu với 'articleID' (bài viết của bạn có ID của một số loại, tôi giả sử?) Và cờ cho' is_sustainable', 'is_conservation', v.v. Sau đó, bạn có thể có một công việc hàng loạt sẽ chèn các hàng mới vào bảng này, nhập các cờ chính xác thông qua các câu lệnh 'like'. Sau đó, chỉ cần tham gia vào bảng tra cứu này và sử dụng các cờ thích hợp. –
Tôi nghĩ rằng vấn đề với các bản sao phát sinh khi có một trận đấu trên nhiều từ, không phải là một trận đấu hoặc tiêu đề và cơ thể – SWeko