SQL 2005索引视图上的全文索引填充性能

时间:2009-11-26 17:16:24

标签: sql-server-2005 full-text-search indexed-view

我创建了一个索引视图:

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 FULLTEXTALLCOLUMN FULLTEXTKEY实际上是ValueID,但这就是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或文字值非常短。)

1 个答案:

答案 0 :(得分:1)

我不知道你的数据;为什么你不能把全文索引放在原始表上?您可以将计算列添加到表结构中。这样你就不会有索引重建操作(我认为这是扫描的原因)

如果您不能这样做,那么下一个最简单的更改可能会创建一个填充sp或者triggert的查找表,这样您就可以更改表的索引,以便它们对您的查询有意义。

您的最终选项(以及需要花费一些时间才能正确使用的选项)将使用分区表。您可以拥有一个覆盖视图上过滤数据的分区。全文索引整个表;运行时的查询将在分区表中包含相关数据。