我已经创建了一个索引的观点:

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)

在SQL2005年标准SP3需要永远充满文字的索引,因为该全文检索执行以下的查询每一行的查看:

SELECT COLUMN FULLTEXTALL FROM[dbo].[LogValueTexts] WHERE COLUMN FULLTEXTKEY = @p1

我假设 COLUMN FULLTEXTALLCOLUMN FULLTEXTKEY 实际上 ValueID, 但这是什么SQL Server分析器显示。问题是,查询计划使用的群集的指标扫描了大约11米的行/1gb的数据,因为它不使用指数上查看。我们试图创造一个计划的指南,查询,但由于它不是一个标准的T-SQL query它不允许它(Incorrect syntax near the keyword 'FULLTEXTKEY').

有没有办法得到全文检索的工作:

  • 升级到SQL2008年(或SQL2005年企业)其它工作正常。
  • 创造一个独特的ID和一个复盖指数在下表。

升级会需要停机服务器上的和可能新的SQL服务器许可证,同时创造的独特ID和一个复盖指数就会浪费很多的空间,因为只有一个子集的11米的行需要全文索引(LRVS_VALUE 往往是 NULL 或者有一个非常短的文本值)。

有帮助吗?

解决方案

我不知道你的数据;为什么你不能把全部文字索引的原始表?你可以添加的计算列入您的表格结构。这样,你不会有的指数重建工作(我觉得这就是原因你的扫描)

如果你不能这样做,那么下一个最简单的变化是有可能创建一个查找表填充sp或triggerthat的方式可以改变表中的索引,因此他们对你的查询。

你的最后一个选项(和一个你会需要花费一些时间,获得的权利)将使用分配表。你可以有一个区,涵盖了过滤数据在图。全部文字索引的整个表;你的查询在运行时间将打击分区表的相关数据。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top