小编Ron*_*rby的帖子

动态谓词的索引策略

假设 SQL Server 2012 标准版。

我的数据库有一个包含 5 亿行的表。该表有大约一打列,没有一个列很宽(一些 varchar(100) 和一些 int)。

聚集索引(也是主键)是一个标识列。

使用此表的应用程序有一个屏幕,用户可以在其中搜索大多数列。屏幕上的一个搜索字段是必需的,可以选择搜索开头为或包含,结果是

WHERE ABC LIKE 'something%' -- starts with 
Run Code Online (Sandbox Code Playgroud)

或者

WHERE ABC LIKE '%something%' -- contains
Run Code Online (Sandbox Code Playgroud)

实际查询是参数化的,这与我这里的示例不同。

其他搜索字段以搜索开头,就像上面的第一个示例一样,但它们不是必需的。因此,可以搜索这些字段的任何组合,从而生成动态 where 子句。

鉴于此信息,应创建哪些索引以获得最佳性能?

请记住,我是查询性能调优的新手,我对这种情况的幼稚策略是为每列创建一个非聚集索引,并对具有 contains 搜索选项的列使用全文搜索。我很想知道为什么或为什么不是一个坏主意,以及更好的方法是什么。

更新

我知道全文搜索是如何优化“包含”搜索的情况。

我对问题的另一个方面更感兴趣:如何针对任何给定查询谓词中可能存在或可能不存在的其他搜索字段进行优化。我的问题中包含可以从全文索引中受益的有关该领域的详细信息,只是为了帮助更全面地了解我的特定情况。

index sql-server index-tuning sql-server-2012

5
推荐指数
1
解决办法
672
查看次数

标签 统计

index ×1

index-tuning ×1

sql-server ×1

sql-server-2012 ×1