Összetett kulcs
Sziasztok!
Lehet hogy elég amatőr a kérdés (sőt biztos); Mikor alkalmazzak összetett indexet, illetve mikor szimplát.
Köszönöm a válaszokat
■ Lehet hogy elég amatőr a kérdés (sőt biztos); Mikor alkalmazzak összetett indexet, illetve mikor szimplát.
Köszönöm a válaszokat
Addatszerkezet
nem igazán
Összetett indexre általában lekérdezések gyorsításához van szükség. Amire mindig érdemes figyelni, az a balról jobbra szabály: pl. az (a,b,c) indexet tudja használni a DB akkor is ha (a,b) vagy ha csak (a) indexre van szükséged.
Amit ilyenkor még érdemes lehet figyelembe venni, hogy ha mondjuk az indexed minden mezőt tartalmaz, amire szükséged van a lekérdezéshez, kivéve mondjuk egy, akkor érdemes azt is hozzácsapni az indexhez (ezt hívják covering indexnek), mert ilyenkor a lekérdezés kiszolgálásához szükséges minden infó benne van az indexben, és nem kell még külön a táblából is beolvasgatni.
Ebben a témában még megfontolandó hogy adott esetben ne mesterséges indexet (surrogate key) használjunk, hanem valamilyen természetes (akár összetett) kulcsot használjunk, ez főleg InnoDB esetén lehet érdekes, ahol a primary key egy clustered index (e szerint vannak fizikailag letárolva az adatok, az index levelei maguk az adatsorok), ezért a primary key szerinti elérés nagyon gyors.
Üdv,
Felhő
Amikor összetett a szűrés
Biztos?
normalform
Azonban, ha teljesen kihasználod az összetett indexedet, és még további értékekre is szűrsz, akkor azért egy normális SQL szerver optimalizál.
Normálform
Kukka tutti
Viszont nem azt jelenti, hogy hogy ne használná a motor az egy-egy oszlopra tett indexedet. Csak ha jellemzően több oszlopra szűrsz, akkor (tudtommal) hatékonyabb, ha egy összevont indexet használsz. Viszont mindig csak az index elejétől tudja felhasználni az értékeket.
Köcce,
kontrol
Szintén érdemes arra figyelni, hogy nem minden mezőre érdemes ndexet tenni, pl. az ajtók számának a kardinalitása az elég kicsi, nem lenne elég szelektív az index, ezért nem is használná a DB, csak feleslegesen van karbantartva. Ez alól kivétel lehet egy olyan mező, mint pl: status('processed', 'unprocessed'), ahol a kardinalitás kicsi, de 'unprocessed' státuszú sorból adott esetben nagyon kevés van a 'processed'-hez képest (erről a DB tart nyilván statisztikát), ezért mégis fogja használni az indexet.
Üdv,
Felhő
Köszönöm
Köszi.
Alárendelt mezők
Máshogy megközelítve a dolgot: a lekérdezések egy adott pályán keresztül keletkeznek a webalkalmazásodban. Egy tipikus blognál a főoldalon szeretnéd látni a 10 legújabb bejegyzést. Ez ugyebár egy index a "létrehozva" mezőre. Egy tömeges blog szolgáltatónál viszont semmi érterlme ennek a querynek. Ott mindig az adott blog 10 legújabb bejegyzésére vagy kíváncsi. Itt érdemes egy összetett indexet bevezetni: (blogid, létrehozva), ekkor először szétválogatod blogok szerint a bejegyszéseket, és asztán (ezen belül) dátum szerint tartod nyilván.