2013-07-02 26 views
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左右)将传递一个单一的字符串来搜索这三列,并且查询需要返回所有行,其中这三列中的任何一列都包含正在搜索的字符串的值(不区分大小写)。

的问题:

  1. 什么是创造指数(S),以便查询会以最有效的方式将数据返回(快,同时最大限度地减少SQL Server资源使用)的最好方法?
  2. 为每列创建索引?
  3. 创建一个包含所有3列的索引?
  4. 在索引上启用全文搜索?
  5. 什么方法可以充分发挥SQL Server 2012的潜力?
+1

我会***不推荐使用'char(n)'或'nchar(n)'超过5或者最大值。 10个字符。不要**使用'nchar(20)'或者更糟 - 'nchar(40)' - 这是一个**巨大的浪费空间,你永远不会得到像这样的设计体面的表现。对于超过10个字符的任何内容,我总是会推荐使用'varchar/nvarchar(x)'而不是固定长度的版本..... –

+1

最后的评论:如果你说*三列中的任何一列**包含搜索文本*,那么你需要使用全文搜索,或者你正在寻找'... ItemNumber LIKE' %searchterm%''匹配会自动确保**没有索引**会被使用 - >你的表现会很糟糕...... –

+0

@marc_s感谢所有有用的评论!我更新了我发布的数据类型。我希望这篇文章的重点是关于这种情况下的高效索引。 –

回答

0

由于@marc_s已经建议,全文搜索是唯一有效的选项。

相关问题