我创建了一个索引视图:
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
andCOLUMN FULLTEXTKEY
实际上是Value
and ID
,但这就是 SQL Server Profiler 所显示的。问题是查询计划对大约 11M 行/1GB 数据使用聚集索引扫描,因为它不使用视图上的索引。我曾尝试为该查询创建计划指南,但由于它不是标准的 T-SQL 查询,因此不允许这样做 ( Incorrect syntax near the keyword 'FULLTEXTKEY'
)。
有没有办法让这个全文索引工作,除了:
- 升级到运行良好的 SQL 2008(或 SQL 2005 Enterprise)。
- 在基础表上创建唯一 ID 和覆盖索引。
升级将需要服务器停机,并且可能需要新的 SQL Server 许可证,同时创建唯一 ID 和覆盖索引会浪费大量空间,因为只有 11M 行中的一个子集需要全文索引(LRVS_VALUE
通常NULL
或具有非常短的文本价值)。