SQL Server,动态搜索性能?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

我想知道用动态值在SQL中进行查询的最佳实践是什么,假设我有一个值(nvarchar(Max))

value: "912345678"

select * from AllData
where Number like '%912345678%' 

value: "Michael"

select * from AllData
where Name like '%Michael%' 

value: "Street number 10"

select * from AllData
where Address like '%Street number 10%' 

这个附加程序有点慢,因为在没有%这样的情况下,搜索有9位数的数字会更快

select * from AllData
where Number like '912345678' 

我使用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();

如何提高性能?

提问于
用户回答回答于

通配符搜索如下varchar/nvarchar字段将对每个字符进行迭代,或多或少地,以获得符合批评标准的记录。

选项如下:

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

如果使用LIKEPATINDEX没有获得所需的性能,那么您可能应该编写使用FTS的sp。

扫码关注云+社区