我创建了一个索引视图:
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所显示的内容。问题是查询计划使用聚集索引扫描超过大约11M行/ 1GB的数据,因为它不使用视图上的索引。
我已经尝试为该查询创建计划指南,但由于它不是标准的T-SQL查询,因此不允许它(Incorrect syntax near the keyword 'FULLTEXTKEY'
)。
有没有办法让这个全文索引工作:
LRVS_VALUE
通常为NULL
或文字值非常短。)
答案 0 :(得分:1)
我不知道你的数据;为什么你不能把全文索引放在原始表上?您可以将计算列添加到表结构中。这样你就不会有索引重建操作(我认为这是扫描的原因)
如果您不能这样做,那么下一个最简单的更改可能会创建一个填充sp或者triggert的查找表,这样您就可以更改表的索引,以便它们对您的查询有意义。
您的最终选项(以及需要花费一些时间才能正确使用的选项)将使用分区表。您可以拥有一个覆盖视图上过滤数据的分区。全文索引整个表;运行时的查询将在分区表中包含相关数据。