SQL Server和动态搜索的性能

Bru*_*Pro 16 c# sql-server performance edmx asp.net-web-api

我想知道在具有动态值的sql中进行查询的最佳实践是什么,让我说我有一个值(nvarchar(max))

值:"912345678"

select * from AllData
where Number like '%912345678%' 
Run Code Online (Sandbox Code Playgroud)

价值:"迈克尔"

select * from AllData
where Name like '%Michael%' 
Run Code Online (Sandbox Code Playgroud)

价值:"街道号码10"

select * from AllData
where Address like '%Street number 10%' 
Run Code Online (Sandbox Code Playgroud)

这个approuches有点慢,因为搜索有9位数的数字会更快,没有这样的%

select * from AllData
where Number like '912345678' 
Run Code Online (Sandbox Code Playgroud)

我使用EDMX与C#中的外部数据库建立连接,如下所示:

var Result = EDMXEntity.Entities.Where(x => 
(SqlFunctions.PatIndex("%" + Value.ToLower() +"%", x.Name.ToString().ToLower()) > 0) 
|| (SqlFunctions.PatIndex("%" + Value.ToLower() +"%", x.Number.ToString().ToLower()) > 0)
|| (SqlFunctions.PatIndex("%" + Value.ToLower() +"%", x.Address.ToString().ToLower()) > 0)).Take(50).ToList();
Run Code Online (Sandbox Code Playgroud)

我怎样才能提高性能?

Chr*_*ert 13

varchar/ nvarcharfields 这样的通配符搜索会对符合条件的记录或多或少迭代每个字符.

这类搜索的一个伟大(和快速!)选项是:

  1. 创建全文目录以存储全文索引.
  2. 在您需要搜索的每个表中的列上放置全文索引.
  3. CONTAINS搜索时使用关键字而不是通配符.

你提到寻找可靠的消息来源,是一个很好的阅读.