Keresés akár több kulcsszó alapján
Sziasztok
Adott egy auto complete-es combo amibe egy kulcsszó halmaz alapján adnám vissza az eredményt. Összesen 6 mezőben kell keresnem és ha a kulcsszavak bármelyike előfordul az adott mezőben, akkor vissza kell adnom a rekordot. Konkrétabban: intézmény választó combo, ahol lehet keresni intézmény névre, irányítószámra, település névre, címre, telefonra, kapcsolattartó nevére. Mindezt egy 50,000 soros táblában. Először a következő őrültséggel próbálkoztam:
SELECT sx_intezmenyek. * , sx_telepulesek.telepules_nev FROM `sx_intezmenyek` , `sx_telepulesek` WHERE (sx_intezmenyek.irszam = sx_telepulesek.irszam AND (CONCAT(sx_intezmenyek.intezmeny_nev, sx_intezmenyek.irszam, sx_telepulesek.telepules_nev, sx_intezmenyek.cim, sx_intezmenyek.kapcs_nev, sx_intezmenyek.telefon) LIKE '%Budapest%')) LIMIT 0 , 10;
A kérés 45mp-ig futott, ami ugy egy kicsit sok :)
Következő, talán életképesebb megoldás:
SELECT sx_intezmenyek. * , sx_telepulesek.telepules_nev FROM `sx_intezmenyek` , `sx_telepulesek` WHERE (sx_intezmenyek.irszam = sx_telepulesek.irszam AND ((sx_intezmenyek.intezmeny_nev LIKE '%Budapest%' OR sx_intezmenyek.irszam LIKE '%Budapest%' OR sx_telepulesek.telepules_nev LIKE '%Budapest%' OR sx_intezmenyek.cim LIKE '%Budapest%' OR sx_intezmenyek.kapcs_nev LIKE '%Budapest%' OR sx_intezmenyek.telefon LIKE '%Budapest%')) LIMIT 0 , 10;
Sajnos ennek a futási ideje még mindíg minimum 2mp.
Tettem indexet az adott mezőkre, de több ötlet egyenlőre nem jut eszembe mivel gyorsíthatnám a lekérést. Remélem tudtok segíteni!
Adatbázis: MySQL 5.0.85
■ Adott egy auto complete-es combo amibe egy kulcsszó halmaz alapján adnám vissza az eredményt. Összesen 6 mezőben kell keresnem és ha a kulcsszavak bármelyike előfordul az adott mezőben, akkor vissza kell adnom a rekordot. Konkrétabban: intézmény választó combo, ahol lehet keresni intézmény névre, irányítószámra, település névre, címre, telefonra, kapcsolattartó nevére. Mindezt egy 50,000 soros táblában. Először a következő őrültséggel próbálkoztam:
SELECT sx_intezmenyek. * , sx_telepulesek.telepules_nev FROM `sx_intezmenyek` , `sx_telepulesek` WHERE (sx_intezmenyek.irszam = sx_telepulesek.irszam AND (CONCAT(sx_intezmenyek.intezmeny_nev, sx_intezmenyek.irszam, sx_telepulesek.telepules_nev, sx_intezmenyek.cim, sx_intezmenyek.kapcs_nev, sx_intezmenyek.telefon) LIKE '%Budapest%')) LIMIT 0 , 10;
A kérés 45mp-ig futott, ami ugy egy kicsit sok :)
Következő, talán életképesebb megoldás:
SELECT sx_intezmenyek. * , sx_telepulesek.telepules_nev FROM `sx_intezmenyek` , `sx_telepulesek` WHERE (sx_intezmenyek.irszam = sx_telepulesek.irszam AND ((sx_intezmenyek.intezmeny_nev LIKE '%Budapest%' OR sx_intezmenyek.irszam LIKE '%Budapest%' OR sx_telepulesek.telepules_nev LIKE '%Budapest%' OR sx_intezmenyek.cim LIKE '%Budapest%' OR sx_intezmenyek.kapcs_nev LIKE '%Budapest%' OR sx_intezmenyek.telefon LIKE '%Budapest%')) LIMIT 0 , 10;
Sajnos ennek a futási ideje még mindíg minimum 2mp.
Tettem indexet az adott mezőkre, de több ötlet egyenlőre nem jut eszembe mivel gyorsíthatnám a lekérést. Remélem tudtok segíteni!
Adatbázis: MySQL 5.0.85
Szerintem használj ON szerkezetet
Cache mező, fulltext
A másik, hogy készítesz egy cache mezőt, amibe minden módostáskor konkatenálod az adott mezőket. Így kevesebb like-ra van szükséged.
Valószínűleg
Nem zárja ki egymást