Мое приложение использует Entity Framework поверх базы данных SQL Azure.
Оно имеет функцию, позволяющую пользователю искать записи на основе заданного телефонного номера.В искомой таблице много столбцов, включая 3 столбца для телефонных номеров: столбец BusinessPhone
, HomePhone
и CellPhone
.Все эти три столбца проиндексированы.
Мой 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 НЕ использовать функцию LOWER()
в сгенерированном операторе SQL?
Если это невозможно, могу ли я перехватить этот оператор SQL и удалить функции LOWER()
в коде перед выполнением в базе данных?