全文检索的人口业绩上的一个SQL2005年编制索引视
-
05-07-2019 - |
题
我已经创建了一个索引的观点:
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 FULLTEXTALL
和 COLUMN FULLTEXTKEY
实际上 Value
和 ID
, 但这是什么SQL Server分析器显示。问题是,查询计划使用的群集的指标扫描了大约11米的行/1gb的数据,因为它不使用指数上查看。我们试图创造一个计划的指南,查询,但由于它不是一个标准的T-SQL query它不允许它(Incorrect syntax near the keyword 'FULLTEXTKEY'
).
有没有办法得到全文检索的工作:
- 升级到SQL2008年(或SQL2005年企业)其它工作正常。
- 创造一个独特的ID和一个复盖指数在下表。
升级会需要停机服务器上的和可能新的SQL服务器许可证,同时创造的独特ID和一个复盖指数就会浪费很多的空间,因为只有一个子集的11米的行需要全文索引(LRVS_VALUE
往往是 NULL
或者有一个非常短的文本值)。
解决方案
我不知道你的数据;为什么你不能把全部文字索引的原始表?你可以添加的计算列入您的表格结构。这样,你不会有的指数重建工作(我觉得这就是原因你的扫描)
如果你不能这样做,那么下一个最简单的变化是有可能创建一个查找表填充sp或triggerthat的方式可以改变表中的索引,因此他们对你的查询。
你的最后一个选项(和一个你会需要花费一些时间,获得的权利)将使用分配表。你可以有一个区,涵盖了过滤数据在图。全部文字索引的整个表;你的查询在运行时间将打击分区表的相关数据。
不隶属于 StackOverflow