Posiadam pewien skrypt które musi znaleść produkty podobne do produktu pobranego z xmla.
Aby tego dokonać na początku wykonuję zapytanie szukając po kolei po 3 słowa z danego produktu.
Ogólnie interesuje mnie to czy da się jakoś inaczej wykonać to samo zapytanie aby otrzymać takie same wyniki. Obecne zapytanie potrafi się wykonywać nawet 45 sekund :/
SELECT p.id FROM pco_product AS p WHERE (p.main = '1') AND (p.symbol REGEXP '([s ]|^)(smiley)([s ]|$)' OR p.name REGEXP '([s ]|^)(smiley)([s ]|$)' OR p.name_filter REGEXP '([s ]|^)(smiley)([s ]|$)') AND (((p.name_filter LIKE '%smiley%') OR (p.name_filter LIKE '%elegancki%' AND p.name_filter LIKE '%smiley%') OR (p.name_filter LIKE '%oldschoolowy%' AND p.name_filter LIKE '%elegancki%' AND p.name_filter LIKE '%smiley%') OR (p.name_filter LIKE '%portfel%' AND p.name_filter LIKE '%oldschoolowy%' AND p.name_filter LIKE '%elegancki%') OR (p.name_filter LIKE '%w%' AND p.name_filter LIKE '%portfel%' AND p.name_filter LIKE '%oldschoolowy%') OR (p.name_filter LIKE '%kolorze%' AND p.name_filter LIKE '%w%' AND p.name_filter LIKE '%portfel%') OR (p.name_filter LIKE '%brazowozoltym%' AND p.name_filter LIKE '%kolorze%' AND p.name_filter LIKE '%w%'))) LIMIT 5001
Są tutaj głównie warunki z REGEXP i LIKE
Założyłem index na symbol, name oraz name_filter jednoczesnie.
Oraz osobna index na name oraz osobno index na name_filter i osobno na symbol
Co o tym sądzicie ?