Olvasgatok mostanában az indexelésről, de ilyen konkrét adatot nem igazán találtam. Van erre valami körül-belüli határszám? Pár mondatot írnátok erről?
A kérdező valószínűleg nem olyan projekten dolgozik, ahol ez felmerül. Jó megemlíteni, hogy van az indexeknek költsége (a lemezterületen felül), de a katasztrofálisan is lassulhat (linkek nélkül) inkább elbátortalanít az indexeléstől.
Igazán átfogó dokumentumot nem ismerek a témában, de ajánlanám egyik SO-s válaszolmat néhány tudnivalóval az indexelésről.
Pedig ezt alá tudom támasztani, igaz, csak a saját tapasztalatimmal, nem írásos doksival.
Az index az update jellegű műveleteket alaposan lelassítja. Két-három felesleges vagy rosszul felépített index az addig villámgyors karbantartó műveleteket úgy lelassíthatja, hogy a korábban pár perces futáshoz végül több óra kell.
Ez nem bátorság kérdése, végig kell gondolni, milyen indexeket használsz és mérlegelni kell (ha van választási lehetőség), hogy mi a rosszabb? A lelassult karbantartás vagy az index hiánya miatt lassú lekérdezések.
Ez azért túlzás, természetes, hogy lassabb lesz, de általánosságban sokkal több egy adatbázison (egységnyi idő alatt) a SELECT, mint az INSERT.
Ez csak az adat jellegétől függ. A lassulás mértéke pedig az adatmennyiségtől. Ha például intenzív logolást végzel, akkor az indexelés az írási sebességet tűrhetetlenül leronthatja. Te azt írtad, hogy mindent érdemes indexelni, ami alapján lekérdezel, de ez így nem igaz. Mérlegelni kell a körülményeket.
Ez így ilyen formában nem igaz, ha a kívánt eredmény kiolvasásához pl a tábla nagy részét amúgy is végig kell olvasni (pl mert a felénél több rekordot olvasol ki), akkor tök fölösleges az index. Ezen felül van egy olyan probléma is, amit úgy hívnak, hogy túlindexelés, avagy amikor már az írási sebességed szenved attól, hogy túl sok index van a táblán.
Nincs általánosan jó megoldás. A legfontosabb szabály a DB optimalizálásnál, hogy csak és kizárólag a MÉRÉS mondja meg az igazságot, a TALÁLGATÁS és az ÁLTALÁNOSÍTÁS nem.
Ugyanakkor mindig mindent nincs idő megmérni. (Egy DBA többe kerül, mint egy programozó stb stb) Szerintem jó kölszabály, hogy ha elkezded a lekérdezés feltételeit egyesével alkalmazni, a legszelektívebbel indítva; akkor kevesebb mint 50%-kal csökkenti a rekordok számát, vagy aminek pár az alkalmazása előtt is kevés rekord volt, arra felesleges az index, a többire rá lehet tenni.
Szerintem első körben az ID-ket tedd elsődleges kulccsá a táblákban, és ha valamelyik táblában hivatkozol ilyen ID-kre, akkor ott is tedd azt a mezőt külső kulccsá.
Második lépésben érdemes a szűrésben vagy sorba rendezésben gyakran részt vevő mezőkre kompozit kulcsot tenni.
Harmadik lépésben a lassú lekérdezéseket érdemes optimalizálni, akár indexek bevezetésével is.
1 :)
Nem a rekordszám vagy a lekérdezések száma szabja meg, mindenképp így gyorsabb lesz, tehát érdemes.
A lekérdezés gyorsabb lesz, a
1%
Igazán átfogó dokumentumot nem ismerek a témában, de ajánlanám egyik SO-s válaszolmat néhány tudnivalóval az indexelésről.
Pedig ezt alá tudom
Az index az update jellegű műveleteket alaposan lelassítja. Két-három felesleges vagy rosszul felépített index az addig villámgyors karbantartó műveleteket úgy lelassíthatja, hogy a korábban pár perces futáshoz végül több óra kell.
Ez nem bátorság kérdése, végig kell gondolni, milyen indexeket használsz és mérlegelni kell (ha van választási lehetőség), hogy mi a rosszabb? A lelassult karbantartás vagy az index hiánya miatt lassú lekérdezések.
"Jó megemlíteni"
A "katasztrofális"-ra
Túlzol
Ez azért túlzás, természetes,
Ez csak az adat jellegétől függ. A lassulás mértéke pedig az adatmennyiségtől. Ha például intenzív logolást végzel, akkor az indexelés az írási sebességet tűrhetetlenül leronthatja. Te azt írtad, hogy mindent érdemes indexelni, ami alapján lekérdezel, de ez így nem igaz. Mérlegelni kell a körülményeket.
Janoszen
Igen, én is túloztam elsőre, talán mert a kérdező még sosem indexelt. Az adat jellegétől függ - egyetértünk.
Nem
Nincs általánosan jó megoldás. A legfontosabb szabály a DB optimalizálásnál, hogy csak és kizárólag a MÉRÉS mondja meg az igazságot, a TALÁLGATÁS és az ÁLTALÁNOSÍTÁS nem.
Ugyanakkor mindig mindent
Vannak ökölszabályok
Szerintem első körben az ID-ket tedd elsődleges kulccsá a táblákban, és ha valamelyik táblában hivatkozol ilyen ID-kre, akkor ott is tedd azt a mezőt külső kulccsá.
Második lépésben érdemes a szűrésben vagy sorba rendezésben gyakran részt vevő mezőkre kompozit kulcsot tenni.
Harmadik lépésben a lassú lekérdezéseket érdemes optimalizálni, akár indexek bevezetésével is.
Üdv:
Dávid