Topic: Paieška + rūšiavimas pagal daug laukelių.

Sveiki,

Situacija yra tokia, tarkim yra lentelė vartotojai, kurioje yra įvairus jų duomenys.
Kiti vartotojai gali atlikti paiešką iš tos lentelės pagal įvairius kriterijus,
pvz. Vardą, Lytį, Gimimo datą, šalį, Miestą, ūgį ir t.t. šių parametrų yra apie 10 ateityje gali prisidėti ir daugiau.
Be to dar tas sąrašas gali būti rūšiuojamas pagal vieną ir kelių laukų pvz. (prisijungimo arba registracijos laikas).

Prašymas/klausimas būtų man nereikia gatavo sprendimo, gal kas nors užvestumėt ant kelio kaip tokiu atveju daroma paieša.

Ta prasme paieškos gali būtį vykdoma pagal įvairius parametrus, vieni ieškos tik pagal vardą, kiti lytį,
kiti lytį+miestą+varda, kiti lytį+šalį ar miestą+šalį+šalį amžių, na tų variantų yra tikrai nemažai plius dar rūšiavimas.

Kadangi mysql naudoja indeksus leftmost principu, tai negi mano atveju kiekvienam variantui reikės kuri skirtingus indeksus?
Gal yra ir kitokių variantų?
Be to vydant paiešką kai mysql pilnai naudoja indeksą ir pradžių veikia greitai, bet nuėjus į kokį 30 puslapį užklausa pailgėja labai stipriai,
nors įrašų skaičius nėra kažkoks labai didelis, jis nuolat kinta bet tarkim 5-10M.

Ačiū už bet kokią pagalbą.

Re: Paieška + rūšiavimas pagal daug laukelių.

Tavo atveju tikriausiai jau reikia kurti indeksą ant visų stulpelių. Arba porą indeksų ant tų stulpelių pagal kuriuos dažniausiai atliekama paieška.
(čia reikia žinoti, kad indekso ilgis ribotas).

Jeigu tas netinka, vadinasi turi jau naudoti specializuotus sprendimus, tokius kaip Sphinx, Solr ir pan. Ypač, jeigu pas tave kažkas eina į 30 rezultatų puslapį....

Re: Paieška + rūšiavimas pagal daug laukelių.

Arba, kaip sako hebra is dideliu saitu, viska reikia nafig keshinti :) T.y. dazniausiai naudojamus filtrus ir t.t.

drs> tau reikia info del greicio ar apskritai del filtravimo? Nes filtrai tai WHERE XXX = "laukelis_xxx' AND YYY = 'laukelis_yyy'