3
摘要:
我在SQL Server 2012中创建一个新表作为业务系统设计的一部分。该表有3列(其中包括)各种大小的nvarchar
类型,我的Web应用程序需要使用单个字符串搜索词来查询这3列。该表可能包含不超过100K的记录。在这种情况下,在三个nchar列上SQL Server中索引的最有效方法是什么?
我想索引这些列在SQL Server 2012中的方式,以便它是最有效的得到结果。
我想强调的是,我要问的问题与我的特定情况有关,而不是一般的SQL索引问题。虽然他们的答案可能也适用于一般问题。
语境
- SQL Server 2012的
- 的Windows Server 2008
表列定义:
- ItemNumber ::为nvarchar(10)
- 制造商::为nvarchar(20)
- 描述::为nvarchar(40)
可能记录数:多达100K
使用案例:
最终用户(一1000左右)将传递一个单一的字符串来搜索这三列,并且查询需要返回所有行,其中这三列中的任何一列都包含正在搜索的字符串的值(不区分大小写)。
的问题:
- 什么是创造指数(S),以便查询会以最有效的方式将数据返回(快,同时最大限度地减少SQL Server资源使用)的最好方法?
- 为每列创建索引?
- 创建一个包含所有3列的索引?
- 在索引上启用全文搜索?
- 什么方法可以充分发挥SQL Server 2012的潜力?
我会***不推荐使用'char(n)'或'nchar(n)'超过5或者最大值。 10个字符。不要**使用'nchar(20)'或者更糟 - 'nchar(40)' - 这是一个**巨大的浪费空间,你永远不会得到像这样的设计体面的表现。对于超过10个字符的任何内容,我总是会推荐使用'varchar/nvarchar(x)'而不是固定长度的版本..... –
最后的评论:如果你说*三列中的任何一列**包含搜索文本*,那么你需要使用全文搜索,或者你正在寻找'... ItemNumber LIKE' %searchterm%''匹配会自动确保**没有索引**会被使用 - >你的表现会很糟糕...... –
@marc_s感谢所有有用的评论!我更新了我发布的数据类型。我希望这篇文章的重点是关于这种情况下的高效索引。 –