EF SQL WHERE使用LOWER()转换进行字符串比较

时间:2019-06-28 09:24:42

标签: entity-framework query-performance

我的应用程序正在通过SQL Azure数据库使用实体框架。

它具有一项功能,允许用户根据给定的电话号码搜索记录。要搜索的表有很多列,其中包括3个电话号码列:BusinessPhoneHomePhoneCellPhone列。这三列都已建立索引。

我的EF DbContext在WHERE子句的一部分中生成了以下内容:

WHERE (10 = [Extent1].[Debtor_DebtorStatus]) AND 
(((LOWER([Extent1].[BusinessPhone])) = (LOWER(N'012345678'))) 
OR ((LOWER([Extent1].[HomePhone])) = (LOWER(N'012345678'))) 
OR ((LOWER([Extent1].[CellPhone])) = (LOWER(N'012348678'))) 
)

查询大约需要3分钟才能返回响应(即使我在SQL Management Studio中运行它)。

如果我编辑此SQL语句并删除LOWER()函数,那么它将在不到一秒钟的时间内执行!!!

是否可以通过某些设置使EntityFramework在生成的SQL语句中不使用LOWER()函数?

如果不可能的话,有没有办法我可以在数据库上执行之前截取该SQL语句并删除代码中的LOWER()函数?

0 个答案:

没有答案