MySQL adatbázis optimalizálás elméletben
2010-05-09T14:29:36+02:00
2010-05-10T11:00:27+02:00
2022-07-19T05:02:55+02:00
  • Még annyival egészíteném ki ezt a remek hozzászólást, hogy a mysql néha úgy dönt, hogy minden józan logika ellenére nem akar valamilyen indexet használni (lásd explain). Ilyenkor a use index/force index-szel még rá lehet többnyire venni, hogy használja az általad létrehozott indexet. Csak ilyenkor a futásidőket össze kell hasonlítani, mert néha nem véletlenül nem használ egy indexet a mysql
    Mutasd a teljes hozzászólást!
  • Ha mélyebben érdekel a téma akkor ezt a könyvet ajánlanám, nagyon jól le van írva minden. (rdbms független, elméleti).

    Sok dologtól függ, pl a mysql verziójától, beállításaitól is. Mysql esetében néha mintha a csillagok állása is beleszólna
    Hiába teszel indexet mindenre, nem biztos hogy használni is fogja tudni.

    explain select sum(szam) as szumma, mezo from tbl where mezo3='asd' and mezo2='asd2' group by `szam`; - ez ki fogja neked írni hogy melyik indexet tudja használni.
    Utána már lehet trükközni hogy hogyan írod meg a lekérdezést, hogy használja az indexeket.

    szerk: ja az kimaradt hogy nem igazán az a lényeg hogy milyen indexeket hozol létre, hanem az hogy melyiket tudja használni. A trükk az hogy úgy kell megírnia lekérdezést hogy használni tudja az indexeket.

    A másik fele a dolgoknak hogy az indexek felépítése beszúrásnál időt vesz igénybe -> ha nagyrészt beszúrás van nem biztos hogy érdemes indexelni, ezeket le kell mérni.
    Mutasd a teljes hozzászólást!
  • az adattipusokkal nincsen baj, azokat mindig úgy választom ki hogy a legmegfelelőbbet választom ki az adott mezőnek.
    meg az is okés hogy csak azt kérdezem le ami tényleg kell meg limit meg minden. inkább erre az indexelős részére lennék kiváncsi.
    tehát ha jol értelmezem amit mondasz akkor teszem azt van egy ilyen query:
    select mezo from tbl where mezo2='asd' limit 1
    akkor itt a mezo2-re kell egy indexet létrehozni?

    de mivan akkor ha pl:
    select sum(szam) as szumma, mezo from tbl where mezo3='asd' and mezo2='asd2' group by `szam`

    akkor itt mire hozzam létre? a szam-ra a mezo3, mezo2 re? és egyenként vagy egy indexet hozzak létre amiben mindegyik benne van? vagy hogy?
    Mutasd a teljes hozzászólást!
  • 1. Megfelelő mezőtípusokat kell választani, pl ha valami y,n érték lehet akkor enum és nem int, stb. Ha valamelyik mező nem nullázható, oda kell írni hogy 'not null'

    2. Indexet alapvetően arra a mezőre / mezőkre kell létrehozni ami alapján meg akarod találni a rekordot, de erről könyveket lehet írni.

    3. Célszerű csak azt lekérdezni amire utána tényleg szükség van.
    Mutasd a teljes hozzászólást!
  • Üdv,
    Arra szeretnék rájönni, hogy hogy kell, mi az alapelve egy tábláa optimalizálásának.

    index-elni kell őket, eddig oké. de milyen mezőket? milyen mező párosokat? minden query-re más más indexeket kell létrehozni? vagy van valami standard amit minden táblán célszerű létrehozni?
    pl ha van egy olyan query, hogy:

    select count(valami) as valami from tbl where asd='0' group by valami

    itt pl hogy kéne optimalizálni? nem igazán értem a logikáját ennek a dolognak ebben szeretnék egy kicsit tájékozódni, előre is köszönet mindenkinek! :)
    Mutasd a teljes hozzászólást!
abcd