Ron*_*rby 5 index sql-server index-tuning sql-server-2012
假设 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 搜索选项的列使用全文搜索。我很想知道为什么或为什么不是一个坏主意,以及更好的方法是什么。
我知道全文搜索是如何优化“包含”搜索的情况。
我对问题的另一个方面更感兴趣:如何针对任何给定查询谓词中可能存在或可能不存在的其他搜索字段进行优化。我的问题中包含可以从全文索引中受益的有关该领域的详细信息,只是为了帮助更全面地了解我的特定情况。
根据所提供的信息很难说,但是......
你说的是阅读。您不是在谈论插入或更新。在我看来,“大约十几个”非聚集索引可能会减慢写入速度。话又说回来,您的应用程序可能没有大量插入或更新,但这可能没问题。还有将所有这些索引加载到内存中的问题。
我的建议是在开发/测试环境中测试各种策略,看看哪种策略最有效。
该视频可能有帮助: http://www.brentozar.com/archive/2013/06/the-top-3-indexing-mistakes-in-sql-server-video/