如何索引用户表以改善用户的真实姓名搜索?

时间:2014-04-09 16:02:18

标签: sql-server indexing

在使用Linq to SQL的MVC应用程序中,我有许多页面允许按其真实姓名,电子邮件(以及其他一些字段)过滤用户。用户的名字,姓氏和所有额外字段存储在单独的列中。现在,用户表没有索引(除了用户ID的聚集索引)。

Linq在where部分中生成一个具有(或多或少)此查询的查询:

(firstName + " " + lastName) LIKE @searchTerm OR
(lastName + " " + firstName) LIKE @searchTerm

如果我要编制索引,那会是一个好方法吗?

我在考虑:

  1. 添加2个复杂索引(firstName,lastName)(lastName,firstName)
  2. firstName上添加索引,在lastName
  3. 上添加另一个索引
  4. 别的什么?
  5. SQL Server是否会实际使用(firstName + " " + lastName) LIKE @searchTerm搜索中第一个示例中的索引?

    如果我有更多时间,我会尝试自己进行一些测试,但也许有人已经不得不解决类似的问题了?


    onskee提出的解决方案让我想起了另一个在使用其他人制作的数据库时遇到过的问题。它涉及添加一个计算列,其中包含用户名的所有组合(名字优先,姓氏优先等)和其他应该可搜索的列,并在此计算列上添加全文索引。我不确定它有多有效,我想我也必须测试它。

1 个答案:

答案 0 :(得分:1)

添加包含FirstName和LastName的计算列,然后添加索引呢?我没有测试过性能,但这是尝试的一种方式。

ALTER TABLE dbo.Users ADD  FullName  AS FirstName + ' ' + LastName
GO


CREATE NONCLUSTERED INDEX IX_FullName ON dbo.Users
(
FullName
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO