mam linię LINQ że im korzystania w EF, który jest w zasadzie robi myTable.Where(c => c.Contains('mystring'));
Bądź użycie Entity Framework Zawiera zamiast podoba i wyjaśnij „ESCAPE ~”
Jest to wygenerowany kod:
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 '~'
Moje dwa pytania to:
Jak mogę użyć ZAWIERA (...) zamiast LIKE? Wygląda na to, że LIKE działa bardzo wolno, gdy tabela używa indeksowania pełnotekstowego. Kopiowanie i wklejanie zapytania zajmuje 4 sekundy, ale jeśli zmienię LIKE na CONTAINS(), to natychmiast.
Dlaczego robi ESCAPE "~"? Kopiując + wklejając to do serwera SQL, uruchamia się około 4 razy szybciej, jeśli usunę część "ESCAPE".
ucieczki jest prawdopodobnie ze względu na unikanie znaków wieloznacznych. Spróbuj umieścić 'mystring *' zamiast 'mystring' - w SQL Server zostanie prawdopodobnie przeniesiony jako' mystring ~ * '- stąd ucieczka mówi, że znak tyldy przed symbolem wieloznacznym oznacza, że nie jest to znak wieloznaczny, lecz właśnie ta postać. – Pako
hmm, dodanie * nie miało znaczenia. Myślę, że jest on podłączony do LIKE, więc jeśli uda mi się rozwiązać punkt 1, to może rozwiązać punkt 2: – NibblyPig
nie ma znaczenia, w jakim sensie? Czy sprawdziłeś wartość parametru w serwerze sql (używając na przykład profilera)? Wiem, że to nie rozwiązuje twojego problemu lub nie pomaga - to tylko wskazówka, dlaczego uciekamy. – Pako