Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何索引用户表以改进用户搜索';什么是真名?_Sql Server_Indexing - Fatal编程技术网

Sql server 如何索引用户表以改进用户搜索';什么是真名?

Sql server 如何索引用户表以改进用户搜索';什么是真名?,sql-server,indexing,Sql Server,Indexing,在一个使用Linq to SQL的MVC应用程序中,我有很多页面,可以根据用户的真实姓名、电子邮件(以及其他一些字段)过滤用户。用户的名字、姓氏和所有额外字段存储在单独的列中。现在,用户表没有索引(除了用户id上的聚集索引) Linq生成一个查询,该查询在where部分(或多或少)包含以下内容: (firstName + " " + lastName) LIKE @searchTerm OR (lastName + " " + firstName) LIKE @searchTerm 如果我将其

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

Linq生成一个查询,该查询在where部分(或多或少)包含以下内容:

(firstName + " " + lastName) LIKE @searchTerm OR
(lastName + " " + firstName) LIKE @searchTerm
如果我将其编入索引,那么什么是好的方法

我在想:

  • 添加两个复杂索引
    (firstName,lastName)
    (lastName,firstName)
  • firstName
    上添加索引,在
    lastName
  • 还有别的吗
  • SQL Server是否会实际使用
    (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在每个场景中的实际行为。