Muszę wysłać zapytanie do tabeli w bazie danych SQLite, aby zwrócić wszystkie wiersze w tabeli pasujące do podanego zestawu słów.SQLite - jak zwracać wiersze zawierające pole tekstowe zawierające jeden lub więcej ciągów?
Aby być bardziej precyzyjnym: Posiadam bazę danych zawierającą ~ 80 000 rekordów. Jednym z pól jest pole tekstowe zawierające około 100-200 słów na rekord. Co mogę zrobić, to wziąć listę 200 pojedynczych słów kluczowych {"jabłko", "pomarańczowy", "gruszka", ...} i pobrać zestaw wszystkich rekordów w tabeli, które zawierają co najmniej jeden słów kluczowych w kolumnie opisu.
natychmiast oczywistym sposobem na to jest coś takiego:
SELECT stuff FROM table
WHERE (description LIKE '% apple %') or (description LIKE '% orange %') or ...
Jeśli mam 200 terminów, skończę z dużym i bolesnego patrząc SQL oświadczenie, że wydaje mi się być niezdarny, przypomina formę złej praktyki i nie jest zaskakujące, że zajmuje dużo czasu - więcej niż sekundę na 1000 rekordów.
Ta odpowiedź Better performance for SQLite Select Statement wydawało blisko tego, co trzeba, i wskutek utworzonego indeksu, ale według http://www.sqlite.org/optoverview.html SQLite nie używa żadnych optymalizacje jeżeli operator LIKE jest używany z rozpoczynającym% zamiennika.
Nie będąc ekspertem SQL, zakładam, że robię to w głupi sposób. Zastanawiałem się, czy ktoś z większym doświadczeniem może sugerować bardziej rozsądny i być może bardziej skuteczny sposób robienia tego?
Alternatywnie, czy istnieje lepsze podejście do problemu?
Dziękuję, dokładnie rozwiązuje problem. Spojrzałem na link i wygląda idealnie. – Sam