Я создал индексированный вид:полнотекстового индекса производительности населения на индексированного представления SQL 2005
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 с пакетом обновления 3 она принимает навсегда для заполнения полнотекстового индекса на этой точке зрения, так как полный -text индексирование выполняет следующий запрос для каждой строки в представлении:
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 при создании уникального идентификатора и индекс покрытия будет тратить много места, потому что только подмножество 11М строк нужно полнотекстового индексирования (LRVS_VALUE
является часто NULL
или имеет очень короткое текстовое значение).
Я использовал ваше второе предложение, которое в основном обновлено вручную индексированным представлением - создало отдельную таблицу (с той же структурой, что и индексированное представление), которая каждые 10 минут обновляется новыми строками из реальной таблицы. –