Sql server 如何索引用户表以改进用户搜索';什么是真名?
在一个使用Linq to SQL的MVC应用程序中,我有很多页面,可以根据用户的真实姓名、电子邮件(以及其他一些字段)过滤用户。用户的名字、姓氏和所有额外字段存储在单独的列中。现在,用户表没有索引(除了用户id上的聚集索引) Linq生成一个查询,该查询在where部分(或多或少)包含以下内容:Sql server 如何索引用户表以改进用户搜索';什么是真名?,sql-server,indexing,Sql Server,Indexing,在一个使用Linq to SQL的MVC应用程序中,我有很多页面,可以根据用户的真实姓名、电子邮件(以及其他一些字段)过滤用户。用户的名字、姓氏和所有额外字段存储在单独的列中。现在,用户表没有索引(除了用户id上的聚集索引) Linq生成一个查询,该查询在where部分(或多或少)包含以下内容: (firstName + " " + lastName) LIKE @searchTerm OR (lastName + " " + firstName) LIKE @searchTerm 如果我将其
(firstName + " " + lastName) LIKE @searchTerm OR
(lastName + " " + firstName) LIKE @searchTerm
如果我将其编入索引,那么什么是好的方法
我在想:
(firstName,lastName)
和(lastName,firstName)
firstName
上添加索引,在lastName
(firstName+“”+lastName)上第一个示例中的索引,如@searchTerm
搜索
当我有更多的时间时,我会尝试自己进行一些测试,但也许有人已经解决了类似的问题
onskee提出的解决方案让我想起了另一个我在处理别人制作的数据库时遇到过的解决方案。它包括添加一个计算列,该列包含所有用户名(名字第一、姓氏第一等)和其他列的组合,这些列应该是可搜索的,并在此计算列上添加全文索引。我不确定它有多有效,我想我也必须对它进行测试。添加一个包含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
这是一个有趣的选择。我想我必须准备一个测试表,并检查SQL Server在每个场景中的实际行为。