Я создал индексированное представление:
CREATE VIEW LogValueTexts WITH SCHEMABINDING AS
SELECT ISNULL(LRVS_SLOG_ID*256+LRVS_IDX,0) AS ID,LRVS_VALUE AS Value
FROM dbo.LRVS_LogRecordedValues WHERE LEN(LRVS_VALUE)>4
CREATE UNIQUE CLUSTERED INDEX IX_LogValueTexts ON LogValueTexts (ID)
В SQL 2005 Standard SP3 заполнение полнотекстового индекса в этом представлении занимает вечно, потому что полнотекстовое индексирование выполняет следующий запрос для каждой строки в представлении:
SELECT COLUMN FULLTEXTALL FROM[dbo].[LogValueTexts] WHERE COLUMN FULLTEXTKEY = @p1
Я предполагаю, что COLUMN FULLTEXTALL
и COLUMN FULLTEXTKEY
на самом деле Value
и ID
, но это то, что показывает SQL Server Profiler. Проблема заключается в том, что план запроса использует сканирование кластерного индекса по примерно 11 миллионам строк / 1 ГБ данных, поскольку он не использует индекс в представлении.
Я попытался создать руководство по плану для этого запроса, но, поскольку это не стандартный запрос T-SQL, он не позволяет его (Incorrect syntax near the keyword 'FULLTEXTKEY'
).
Есть ли способ заставить этот полнотекстовый индекс работать иначе, чем:
- обновление до SQL 2008 (или SQL 2005 Enterprise), где он работает нормально.
- создание уникального идентификатора и индекса покрытия для базовой таблицы.
Обновление потребует простоя на сервере и, возможно, новых лицензий SQL Server при создании уникального идентификатора, а индекс покрытия будет тратить много места, потому что только подмножество 11M строк требует полнотекстовой индексации (LRVS_VALUE
часто NULL
или имеет очень короткое текстовое значение).