我想优化一个表查找,因为执行计划显示一个相当大的并行化表扫描。该表格被称为Opportunity
,我正在筛选的列是Name
。具体来说,我想没有“补充”为Name
的一部分,所有行:是否有可能写一个过滤索引的列值不是'X'?
WHERE ([Name] NOT LIKE '%Supplement%');
我换一种方式来优化这个环顾四周,整个过滤索引来到这正是我需要的,但他们不似乎不喜欢LIKE
关键字。有没有一种替代方法来创建像这样的过滤索引?
该表有〜53k行,当直接查询服务器需要4秒钟获取数据,但是当我将它作为链接服务器查询时(这是我需要的)需要2分钟。为了改善这一次,我将查询移出了与链接服务器交谈的脚本,并在远程服务器上创建了一个视图。仍然需要永远。
这是我到目前为止已经试过,但SSMS说,这是无效的:提前
CREATE NONCLUSTERED INDEX [FX_NotSupplementOpportunities]
ON [Opportunity]([Name])
WHERE (([Name] NOT LIKE '%Supplement%')
AND ([Name] NOT LIKE '%Suplement%')
AND ([Name] NOT LIKE '%Supplament%')
AND ([Name] NOT LIKE '%Suppliment%'));
感谢您的任何建议!
不幸的是,你不能在SQL-Server中的筛选索引条件中使用LIKE。 – 2014-09-18 21:18:15
有替代建议吗? – Gup3rSuR4c 2014-09-18 21:21:02