Mamy dużą tabelę z informacjami o produkcie. Prawie przez cały czas szukamy nazw produktów, które zawierają konkretne słowa, ale niestety te zapytania trwają wiecznie.Poprawianie wydajności zapytań SQL LIKE
Przykład: Znajdź wszystkie produkty, w których nazwa zawiera słowa "stal" i "102" (niekoniecznie obok siebie, więc produkt taki jak "Stal żelazna Ninja 102 x" jest zgodny, podobnie jak "Smok stal 102 b "jest to).
Obecnie robimy to tak:
SELECT columns FROM products WHERE name LIKE '%WORD1%' AND name LIKE '%WORD2%'
(liczba takich słów są zazwyczaj 2-4, ale może teoretycznie być 7-8 lub więcej).
Czy jest to szybszy sposób?
Dopasowujemy tylko słowa, więc zastanawiam się, czy to może w jakiś sposób pomóc (np. Produkty w powyższym przykładzie są zgodne, ale "Samuraj swordsteel 102 v" nie pasuje, ponieważ "stal" nie jest samodzielna) .
Moja własna myśl polega na stworzeniu tabeli pomocniczej ze słowami z nazw produktów, a następnie użycia tej tabeli do uzyskania identyfikatorów pasujących produktów.
czyli stół jak: [id, słowo, productid] więc mamy na przykład:
1, samurai, 3
2, swordsteel, 3
3, 102, 3
4, v, 3
prostu zastanawiam się, czy jest zbudowany w sposób to zrobić w MySQL, więc nie mam wdrażać własne rzeczy + utrzymywać dwie tabele.
Dzięki!
Dzięki. Mamy już pełny indeks tekstowy, ale uruchomienie lub zapytanie trwa 5-10 sekund lub dłużej. – Louisa
@Louisa Czy używasz MATCH zamiast LIKE do korzystania z indeksu pełnotekstowego? –
Dobra wskazówka, ale MECZ powraca do wielu wierszy, gdy WYBIERAMĘ * Z produktów GDZIE MECZ (NAZWA) PRZECIWKO ('+ słowo1 + słowo2 + słowo3' ') - otrzymuję wyniki ze wszystkimi trzema słowami, ale także z wynikiem 1 -2 słów w nazwie. – Louisa