【发布时间】:2014-09-18 21:06:27
【问题描述】:
我正在尝试优化表查找,因为执行计划显示了相当大量的并行表扫描。该表名为Opportunity,我过滤的列是Name。具体来说,我希望所有没有“补充”的行作为Name 的一部分:
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。 -
有其他推荐吗?
标签: sql-server sql-server-2012 query-optimization filtered-index