rész 11
Rész 11.7: A indexek SQLite adatbázisok. Indexelés táblázat SQLite3. B-fa algoritmus adatbázisokban
Rész 11.7: A indexek SQLite adatbázisok. Indexelés táblázat SQLite3. B-fa algoritmus adatbázisokban
Persze, az indexek az adatbázisok végre szofisztikáltabb algoritmusok, az egyik legnépszerűbb és leggyakrabban használt algoritmusok indexek relációs adatbázisokban az algoritmus működik a B-fákat. Kapott egy nagy elterjedt miatt a megbízhatóság, a hatékonyság és a relatív egyszerűség ebben képesek leszünk, hogy megbizonyosodjon arról. Az indexek SQLite adatbázisok alapján B-tree algoritmus.
Mik indexek az adatbázisokban sqlite3
Az indexek rendelünk az alanynak az adatok integritásának biztosítása adatbázisokban csak annak a ténynek köszönhető, hogy az elsődleges kulcs oszlop mind egy táblázat-szintű korlátok. és az index táblázat minden relációs adatbázis. beleértve SQLite3. Az indexek SQLite adatbázisok adatbázis-objektumok. Ez azt jelenti, hogy az index nevének egyedinek kell lennie az egész adatbázisban.
Mivel az index - ez az objektum az adatbázisban, a különböző SQL parancsokat lehet alkalmazni azt. Például az adatok meghatározása parancsok szükségesek létrehozása és törlése indexek adatbázisában SQLite az indexek nem alkalmazható adatkezelési parancsokat. Bár nem tudjuk egyszerűen alkalmazhatja ezeket a parancsokat a táblázatok oszlopai, amelyek indexek.
A fő cél az index egy adatbázisban, hogy felgyorsítsa a mintavétel működését az adatokat az adatbázisból. Az indexek jelentősen felgyorsítja a teljesítményt a SELECT utasítások annak a ténynek köszönhető, hogy azokat formájában valósul meg B-fák. de fogunk beszélni többet erről alább. De mivel indexek sebesség lehívása, vagy inkább azért, mert végre egy B-tree indexek nagyon lassú egyéb műveletek az adatok manipulálása:
Ez azért van, mert ezek a műveletek a módosításokat a B-fa, amely egyensúlyban fenntartani a B-fa a jelenlegi állapotában a SQLite újratervezi csomópontok minden egyes változtatás után a táblázat adatait.
Egyszerűbben fogalmazva, ha létre az index, akkor hozzon létre egy másik táblázatot, amely tárolja az értékeket a indexelt oszlop rendezett módon, és az adatbázis helyett rendezni az adatokat a forrás táblázatban használja index táblázat, amely tárolja a hivatkozás az eredeti asztalnak ezáltal csökkenti a műveletek számát a keresési és összehasonlítása a kívánt értékeket.
Arra a következtetésre jutottunk kódok az adatbázisokban felgyorsítja gyűjtemény lekérdezések csökkentésével relatív értékeit műveleteket, de lassítják más adatkezelési műveletekre.
Indexek létrehozása a SQLite adatbázisok. CREATE INDEX
Az indexek jelentősen felgyorsítja a visszakeresés adatokat az adatbázis egy SELECT, de ugyanakkor lassítja az indexek más szolgáltatók adatkezelési. Lássuk, hogyan kell létrehozni az indexeket táblák az adatbázisban SQLite ellenőrzés alatt. Bár van egy csomó időt, hogy hozzon létre indexeket az adatbázisban, ha a bejelentett elsődleges kulcs megszorítás egy oszlop - PRIMARY KEY (kulcsok és kulcs attribútum).
Elsődleges kulcs megszorítás - a tábla szintű megszorítás használják integritásának biztosítása adatbázisokban, de ugyanakkor egy oszlopot PRIMARY KEY-index az adatbázisban, ami jelentősen felgyorsítja az adatok visszakeresése.
És most nézzük meg Indexek létrehozása szintaxis bázisok sqlite3 adatok:
SQLite egy rugalmas szintaxisa létrehozására indexek. azt mondani, hogy azt akarjuk, hogy hozzon létre egy adatbázis-objektum, akkor kell használni a CREATE parancs. Következő lépésként adja meg, amely az adatbázisban akarunk létrehozni egy objektumot, ebben az esetben INDEX. Ezután jön egy opcionális csekket fennállásának HA NEM LÉTEZIK. Ellenőrzésre van szükség, ha nem biztos benne, hogy az index létezik.
Ha megad egy kulcsfontosságú mondatot HA NEM LÉTEZIK, hogy SQLite először ellenőrzi az index nevét egyediségét, és ha az adatbázis index ugyanazzal a névvel, akkor a figyelmeztetés helyett egy hiba. Az ellenőrzést követően az index nevét, amelyeket fel lehet használni helyett egy minősítő vagy a teljes nevét, az index azt jelzi, az adatbázisba.
Ezután jön az ON kulcsszó, majd a tábla nevét, amelyre az index jön létre. Miután a tábla nevét zárójelben, hogy az oszlop a tábla nevét, hogy lesz indexelt veszi, hogy az indexelt oszlopok lehet több, ebben az esetben ezeket vesszővel elválasztva.
Miután az oszlop nevét, akkor a WHERE záradékot, amely lehetővé teszi, hogy bizonyos feltételek megteremtése az index.
Készítsen több indexek egyetlen táblát az adatbázisban SQLite3
Említettük, hogy az SQLite hozhat létre több indexek egyetlen táblát az adatbázisban, nézzük meg a szintaxist, hogy több indexek egyetlen tábla, mint indexek is nevezett összetett:
Mivel az index - egy objektum, a névnek egyedinek kell lennie az egész adatbázist, de vannak esetek, amikor dolgozik, több adatbázissal, akkor az index segítségével lehet kivenni a minősítő vagy a teljes név index. Tervezés ha létezik is meglétének az index eltávolítása előtt, akkor, ha az index az azonos nevű ott SQLite figyelmeztetni fogja, egyébként van egy hiba. Magát a kéréssel, hogy törölni az indexet kezdődik a DROP paranccsal. és akkor jön a INDEX legfontosabb mondat, amelyik beszámol SQLite3 hogy szeretnénk törölni csak egy index, hanem bármely más adatbázis-objektum.
Példák a használata indexek adatbázisban SQLite
Nézzünk néhány példát létrehozására indexek SQLite adatbázisok. Később látni fogjuk, hogy az indexek valóban felgyorsítja adatok visszakeresése, ha megnézzük az adatokat kiválasztás az adatbázisból.
Hozzunk létre egy táblázatot az adatbázist a CREATE parancs:
Van két lehetőség újra indexelés táblázatok. Ha meg egy tábla nevét, SQLite teszi újra indexelés minden oszlopokat megadott index. Ha így teszünk újra indexelés, az index nevének feltüntetésével az értékek a sorozatot kell hagyni, és újra alakult egy adott index.
Ha nem kell használni indexek az adatbázisokban
Indexek - egy nagyon erős és hasznos eszköz az adatbázisokban, többek között adatbázisokat SQLite ellenőrzés alatt. Indexek adatbázisokban létre annak érdekében, hogy felgyorsítsa adatok beolvasása művelet általában relációs adatbázisok hozzon létre egy külön táblázatot, amelyben tárolja értékeit indexelt oszlopok rendezett módon, tehát a teremtés az index - ez mindig a terjeszkedés és növekedés az adatbázisban.
Indexek kényelmes és jó, de vannak helyzetek, amikor indexek nem alkalmazható, például:
- Ha van egy kis adatbázis egy kevés sort a táblázatban, az indexek nem szabad használni, mivel nem előnyt indexek nem kap.
- Ha van egy táblázat, amelyben gyakran termelnek adatmódosítás műveleteket. Az indexek nem kell alkalmazni, mivel ezek nagyon lassú működése adatfrissítések végzett egy UPDATE utasítás.
- Ha gyakran új sorokat egy adatbázis tábla (gyakran az INSERT paranccsal), akkor a táblák, amelyek sok SQL INSERT lekérdezést nem szükséges létrehozni indexek, mivel SQLite véglegesen átalakítja az index tábla, ezért a sebesség INSERT művelet nagyon csökken.
- Ha a tábla olyan oszloppal, ahol egy csomó NULL értékeket, ezek az oszlopok kerülni kell, mert indexek, NULL értékek megfosztani az előnyöket, amelyek indexek az adatbázisokban.
- Ha a tábla oszlopokat gyakran végeznek műveleteket az adatok manipulálása, ne használja őket indexek. Minden változás SQLite oszlop, mint bármely más adatbázis, újratervezi az indexek.
Belső indexek SQLite adatbázisok. ROWID oszlopot SQLite3. A szerkezet a B-fa
Az alapértelmezett minden SQLite adatbázis táblában van egy belső index arra utal, hogy a ROWID. Néha az index egybeesik a tábla elsődleges kulcs elsődleges kulcsot, néha nem ugyanaz, de ROWID van minden asztalnál. Ha beszélni egyszerűen és világosan, a ROWID - ez egy újabb oszlopot, amely minden SQLitei táblázatban szereplő index az asztalra.
Eltekintve attól a ténytől, hogy a ROWID - ez az index egy másik módja annak, hogy a az adatok sértetlenségét. Nézzünk egy ROWID index SQLite adatbázisok. ROWID-egy 64 bites szám, amely egyedileg azonosítja minden sort az SQLite adatok.
A jellemzője SQLite adatbázisok, hogy az adatbázis sorok vannak tárolva egy B-fát (sok adatbázisok használata B-fa algoritmus). Beszéd röviden és elvont, a B-tree - ez egy kiegyensúlyozott és nagyon vastag fák, amelyek nagymértékben felgyorsítja az adatok visszakeresése.
Nézzük megérteni, hogy a B-fa, és megérteni, hogy az indexek SQLite adatbázisok és egyéb relációs adatbázisok. Kezdeni, azt javasoljuk, hogy nézze meg az alábbi képet, azt mutatja a szerkezet egy B-fa, és ennek megfelelően, és az indexek egy adatbázisban.
indexszerkezetet az SQLite adatbázisban. A szerkezet a B-fa
Látjuk, hogy a szerkezet a B-tree elágazást. minden szirom egy fa - a csomópont SQLite adatbázisok és egyéb relációs adatbázisok, minden csomópont - egy asztal. A felső asztal az ábrán - a gyökere a B-fa. B-fát kiegyensúlyozottnak mondható, mert a hossza az út a gyökér bármely két csomópont azonos szinten.
A gyökér a B-tree - egy táblázatot referencia, amelyek meg vannak írva hivatkozásokat más könyvtárak, a másodlagos könyvtárakat is utalhat, hogy más könyvtárak, és azok viszont tárolni utalás néhány adatot, sőt, a mélység a B-tree ez lehet nagyon magas (a szint is sok).
Amikor végre a SELECT adatbázis kezd, túl sok adatot összehasonlítjuk ezt az értéket a tárolt értékek az adatbázisban, ha az adatbázis már egymillió sor, az adatbázis lenne megy át egy millió sorok, vagy amíg el nem fogy a húr, vagy amíg nem lesz Lapozzunk a kívánt értéket.
B-fákat csak nem segítenek elkerülni buta válogatás vonalak és csökkenti a vizsgálatok számát sokszor, minden attól függ, a sorok száma az adatbázisban.
Megjegyzés: ha az oszlop PRIMARY KEY nyilvánítja, mint valami más, akkor az értékek elsődleges kulcs és ROWID nem egyezik. ROWID oszlop értékét meg lehet változtatni használatával UPDATE parancs, valamint más értékek egy adatbázis tábla. De ne feledjük, a szabályok az egyedi és örök, amelyek jellemző az alapvető tulajdonságok és annak szükségességét, hogy biztosítsa az adatok az adatbázisban, mint az elsődleges kulcs-limit asztal szintje, akkor feltételezhetjük, hogy a belső SQLite ROWID index egy tábla szintű megszorítás.
Asztalok NÉLKÜL ROWID az SQLite nélkül belső táblaindexek
Az SQLite, akkor hozza létre a táblát anélkül, hogy a ROWID oszlopot. azaz anélkül, hogy egy belső indexet. Egy ilyen megközelítés azzal a kis pluszok: néha felgyorsítja a visszakeresés adatokat az adatbázis és kissé csökkenti a adatbázisban. Ha úgy dönt, hogy hozzon létre a táblázat nélkül ROWID az SQLite, akkor meg kell, hogy két dolgot: Először is, az asztal mindig kell lennie egy elsődleges kulcsot, másrészt, akkor kell használni egy jelszót anélkül ROWID.
Hozzunk létre egy táblázatot nélkül ROWID oszlopon, tervezés nélkül ROWID:
Most a táblázat nem rowid oszlopot. Másik jellemzője a tábla nélkül ROWID hogy AUTOINCREMENT oszlop szintű korlátozás nem fog működni. NEM ROWID elsődleges kulcs a táblázat semmilyen körülmények között nem lehet NULL, ha megpróbálja felvenni a NULL PRIMARY KEY oszlopában NÉLKÜL ROWID, hogy SQLite hibát generál.
Mivel a munka jellegét NÉLKÜL ROWID táblák. SQLiterekomenduyut fejlesztő használja ezeket a táblázatokat az alábbi esetekben:
- Ön használja az összetett elsődleges kulcsnak, vagy ha az elsődleges kulcs nem egész szám, és van egy másik típusú adatokat.
- Ha meg kell növelni a sebességet a tábla elsődleges kulcs EGÉSZ, hozzon létre egy táblázatot nélküli belső index, hogy gyorsítsák fel és csökkenti a minta térfogata adatbázisban. Ha a tábla ROWID index és INTEGER PRIMARY KEY, ez teszi túl sok SQLite két ciklusban: az első ciklusban a ROWID oszlopot, a második ciklusban az oszlop INTEGER PRIMARY KEY, bár az értékek az oszlopok azonos.
- Ha a táblák tárolják sorok kis értékeket a táblázat nélkül az index (NEM ROWID) fog futni valamivel gyorsabb, mint egy ROWID oszlopot.
Ha adatbázisok tervezésével és szeretné optimalizálni, akkor nem kell aggódnia, hogy mely táblázatot kell használni: ROWID vagy NÉLKÜL ROWID, a fejlődési szakaszban és a design. A teszteket a legjobb után történik az adatbázis megtervezni és megvalósítani. Mivel nincs különbség egy ROWID táblák nélkül nincs, kivéve a fent leírt, nem.
Egy kicsit arról, hogyan lehet létrehozni helyszínek és hogyan támogassák a helyszínen:
Azt javasoljuk, hogy látni és olvasni:
Köszönöm kérhető leírni munka indexek az RDBMS és nagyon érdekes, hogy írjak a B-fákat. Minden kerültek a polcokra!
Kirill, Jó napot!
Értem helyesen, hogy ha én nem, hogy a kiválasztás az adatbázisban, akkor a legjobb, ha letiltja indexek? Csak az én MySQL adatbázis fordulat, nem pedig a SQLite3, ahogy írsz!
Itt kell eljárni a helyzet: Ha tényleg nem kell a támogatást a integritását adatbázisokban, és nincs semmi szükség SELECT lekérdezést, akkor jobb, ha nem hoz létre indexek, valamint a további elfoglalt teret.