Topic: Indexai

Nesenai pastebėjau, kad su phpmyadmin kuriant lentelę, jei nurodai iškarto kuriuos stulpelius indeksuoti, pagamina vieną indeksą iš kelių stulpelių. Visad galvojau jei jau yra indeksas tai jis tiesiog yra (shame on me). Tai ir kilo toks natūralus klausimas : o koks skirtumas? Kuom gerai ir kuom blogai atvejis kai yra trys indeksai po vieną stulpelį ir kai yra vienas indeksas su trimis stulpeliais?

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: Indexai

Pirmiausia tai indeksas, kaip ten bebūtų, tai yra specialiai sudėlioti duomenys specialioje formoje (medyje), kad tarp jų būtų galima greitai kažką surasti. Kaip jau rašei indeksas gali būti ir iš vieno stulpelio ir iš daugiau. Tai vienas iš skirtumų yra tas, kad skiriasi tos duomenų stuktūros dydis. Jeigu tau kažkokioje užklausoje yra reikalingas tik vienas indeksas, o tu turėsi indeksą iš visų stulpelių, tai bus bereikalingai kraunami duomenys į atminti ir tarp perteklinio duomenų kiekio ieškoma. Kitas dalykas yra tas, kad indekas iš daugiau negu vieno stulpelio paprastai turi daugiau variantų ir duomenų medis būna didesnis ir paieška jame yra ilgesnė - nes ten laikomos visos kombinacijos, tai čia tik galiu spėti, kad galbūt kažkiek ilgiau ieškoma, bet turiu pasitikslint.

Aišku, jeigu užklausoje figuruoja 3 paieškos parametrai, tai tavo indeksas tūrėtų ir būti iš 3 stulpelių, nes atrenkant duomenis iš lentelės yra naudojamas TIK VIENAS indeksas. Tarkime jeigu tu turi vieną lentelę ir 3 atskirus indeksus 3 atskiriem stulpeliam, tai tavo užklausa geriausiu atveju panaudos tik vieną indeksą, kiti du parametrai bus ieškomi jau tarp duomenų (-; Na ir aišku dar yra visokių smulkių niuansų.

Re: Indexai

Hmm... Va ir susideliojo kaikurie taškai ant kaikurių 'i'. Dėkui.

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: Indexai

Na čia šiaip labai svarbus dalykas yra suprasti kaip veikia indeksai ir kaip juos išnaudoti, nes be indeksų gali tik savo asmeninį puslapiuką sukti, o kai ateina laikas dirbti su gigabaitinėm ar didesnėm duomenų bazėm tada prasideda visas smagumas (-;

Re: Indexai

Tai teoriškai gaunasi taip, kad jei turiu milžinišką lentelę ir turiu tarkime 3 skirtingas užklausas su atitinkamai 1,2 ir 3 sąlygomis tai pravartu turėti tai pačiai lentelei 3 indeksus su užklausai reikiamais stulpeliais? Ir ar nesusiparins MySql kai reiks pasirinkti iš trijų indeksų. O jei susiparins tada manau pasiims indeksą su daugiau stulpelių...

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: Indexai

Ai nors radau dar: http://dev.mysql.com/doc/refman/5.1/en/index-hints.html šitas turėtų išspręsti panašias situacijas.

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: Indexai

zygis wrote:

Tai teoriškai gaunasi taip, kad jei turiu milžinišką lentelę ir turiu tarkime 3 skirtingas užklausas su atitinkamai 1,2 ir 3 sąlygomis tai pravartu turėti tai pačiai lentelei 3 indeksus su užklausai reikiamais stulpeliais? Ir ar nesusiparins MySql kai reiks pasirinkti iš trijų indeksų. O jei susiparins tada manau pasiims indeksą su daugiau stulpelių...

Teoriškai taip, reikia turėti tokius indeksus, kad jie būtų tinkami visom užklausom. Kokius indeksus naudoja MySQL'as konkrečiom užklausom galima/reikia pasižiūrėti per "EXPLAIN EXTENDED SELECT ..."

zygis wrote:

Ai nors radau dar: http://dev.mysql.com/doc/refman/5.1/en/index-hints.html šitas turėtų išspręsti panašias situacijas.

Taip, čia rankiniu būdu nurodoma kurį indeksą naudoti, jeigu MySQL'as pats paima ne tą kurio tu tikiesi (turint sudėtingesnes lenteles/užklausas dažniausiai jis ir nepaima to ko reikia).