В SQL Server я поместил кластеризованный индекс в представление исключить неэффективность объединения с использованием операторов LIKE :
CREATE VIEW KeywordCount WITH SCHEMABINDING
AS
SELECT
K.ID AS KeywordID
,COUNT_BIG(*) AS KeywordCount
FROM dbo.Grants G
INNER JOIN dbo.GrantStatuses GS2 ON GS2.ID = G.StatusID AND GS2.Status NOT IN ('Pre-Submission', 'Awaiting Signatory Approval', 'Modifying', 'Closed')
INNER JOIN dbo.Keywords K
ON G.Keywords LIKE '%' + K.Word + '%' --It's one of the grant's keywords
OR G.Title LIKE '%' + K.Word + '%' --Word appears in the title
OR Replace(G.Title, '-', ' ') LIKE '%' + Replace(K.Word, '-', ' ') + '%' --Word with hyphens replaced appears in the title
OR G.Synopsis LIKE '%' + K.Word + '%' --Word appears in the Synopsis
OR Replace(G.Synopsis, '-', ' ') LIKE '%' + Replace(K.Word, '-', ' ')+ '%' --Word with hyphens replaced appears in the synopsis
GROUP BY K.ID
GO
CREATE UNIQUE CLUSTERED INDEX IX_KeywordCount
ON dbo.KeywordCount (KeywordID)
GO
Затем я добавил еще один индекс в столбец KeywordCount:
CREATE INDEX IX_KeywordCount_Count
ON dbo.KeywordCount (KeywordCount)
GO
Так почему следующий запрос выполняется 7 минут? Разве индекс не должен дать мне намного лучшую производительность?
SELECT TOP 10 * FROM KeywordCount ORDER BY KeywordCount DESC
EDIT
Спасибо всем, но я знаю, что операторы LIKE и REPLACE сделают это представление неэффективным . Вот почему я добавил кластерный индекс. Я думал, что размещение кластеризованного индекса в представлении материализует данные в таблицу, так что базе данных не придется выполнять объединения . В плане запроса указано, что он выполняет объединения. Это почему?