У меня есть строка LINQ, что им с помощью в EF, который в основном делает myTable.Where(c => c.Contains('mystring'));
сделать Entity Framework использование Содержит вместо Like и объяснить "ПОБЕГ ~
Это сгенерированный код:
SELECT TOP (300)
[Extent1].[ID] AS [ID],
[Extent1].[FKFishEntityID] AS [FKFishEntityID],
[Extent1].[Fish] AS [Fish],
[Extent1].[FishText] AS [FishText],
[Extent1].[FishType] AS [FishType]
FROM [dbo].[Fish] AS [Extent1]
WHERE [Extent1].[FishText] LIKE @p__linq__0 ESCAPE '~'
Мои два вопроса:
Как я могу использовать CONTAINS (...) вместо LIKE? Кажется, что LIKE очень медленно, когда в таблице используется полнотекстовая индексация. Копирование и вставка запроса занимает 4 секунды, но если я изменил LIKE на CONTAINS(), он будет выполняться мгновенно.
Почему это делает ESCAPE '~'? Скопировав + вставку на сервер SQL, он выполняется примерно в 4 раза быстрее, если я удалю часть «ESCAPE».
Escaping, вероятно, связано избежать подстановочных символов. Попробуйте поместить 'mystring *' вместо 'mystring' - в SQL Server он будет передан как' mystring ~ * 'вероятно - поэтому избегайте говорить, что символ тильды перед подстановочным знаком означает, что это не шаблон, а именно этот символ. – Pako
хм, добавив *, не имело значения. Я думаю, что он подключен к LIKE, поэтому, если я смогу решить точку 1, это может решить пункт 2 – NibblyPig
не имеет никакого значения в каком смысле? Вы просмотрели значение параметра в sql-сервере (используя, например, профилировщик)? Я знаю, что это не решение вашей проблемы или помощь - это просто подсказка о том, почему происходит побег. – Pako