Sql - miként az adatbázis indexelése adatbázis - teljesítmény, kód q - egy orosz (ru)

Ha az adatokat tárolják merevlemezek, ezek tárolják az adatok formájában blokkok. Hozzáférés az ilyen egységek végzik teljesen, és ezek hozzáférhetővé tétele az atomi lemez hozzáférés. Meghajtó egységek felépítése azonos módon kapcsolt listák; Mindkettő tartalmaz egy szakaszt az adatok, egy mutatót a helyét a következő csomópont (vagy blokk), és mindkettő nem tárolhatók szomszédos.

Tekintettel arra, hogy a rekordok számát lehet válogatni egy területen, azt mondhatjuk, hogy a keresési mezőbe, ami nincs rendezve igényel lineáris keresés, amely megköveteli N / 2 blokk hozzáférés (átlagosan), ahol N - egységek száma fedett asztal. Ha ez a mező nem alapvető területen (pl. E. Nem tartalmaz egyedi bejegyzés), akkor meg kell keresni a táblázatban tér N férhetnek hozzá a készülékhez.

Ha a rendezett területen lehet használni a bináris keresés, akkor hozzáfér a log2 N Ezen túlmenően, mivel az adatok rendezése alapján nem kulcs mező, a többi a táblázat nem kell keresni az ismétlődő értékeket, ha egy nagyobb értéket találtuk. Így növeli a teljesítményt elengedhetetlen.

Mi indexelés?

Indexelés - egy módja a válogatás a rekordok száma több területen. Létrehozása index a táblázatban létrehoz egy másik adatszerkezet, amely tartalmaz egy értéket mező, és az írás a mutató, amelyre vonatkozik. Ezután a szerkezet az index rendezve, amely lehetővé teszi, hogy végre egy bináris keresés.

A hátránya az indexelés, hogy ezek a mutatók további tárhelyet igényelnek, mert indexek együtt tárolja a MyISAM mechanizmusát használja, ezt a fájlt gyorsan eléri a határait szolgáló fájlrendszer méretét számos területen vannak indexelve ugyanannál az asztalnál.

Először is nézzük készít egy durva vázlata egy adatbázis tábla;

Megjegyzés. char helyett varchar, hogy pontos mérete a lemezen. Ez a minta adatbázis tartalmazza ötmillió sorok és nem töltötte. Most a teljesítménye több lekérdezést fogja elemezni. Ez a kérés azonosítót használó (mezők sorrendje kulcs) és egyet az FIRSTNAME (nem karakteres mezőt szétválogatás nélkül).

1. példa - rendezetten vagy rendezetlen mező

Tekintve, hogy példaértékű tárol r = 5000000 bejegyzések egy fix méretű, így a rekord hosszúságú R = 204 bájt, és tárolja azokat egy táblázat segítségével MyISAM mechanizmust, amely az alapértelmezett blokkméretet B = 1024 bájt. Blokkoló faktor táblázat bfr = (B / R) = 1024/204 = 5 bejegyzések a lemezegység. A blokkok száma tárolásához szükséges a táblázat egyenlő N = (R / BFR) = 5000000/5 = 1.000.000 egységek.

Lineáris keresés az id mező kitöltése kötelező átlagosan N / 2 = 500.000 egység lekérdezéseket, hogy megtalálják az érték, figyelembe véve, hogy id mező kulcsfontosságú területen. De mivel az id mező is rendezve, akkor is el lehet végezni a bináris keresés, amely megköveteli átlagosan log2 1000000 = 19.93 = 20 elérési egységet. Azonnal látjuk, hogy ez egy radikális javulást.

Most FIRSTNAME mező rendezve, és nem az a legfontosabb területen, így a bináris keresés nem lehetséges, és az értékek nem egyedi, ezért a táblázat keresési lesz szükség a végére, hogy pontosan elérni egységek N = 1.000.000. Ez a helyzet kijavítását célzó indexelés.

Tekintettel arra, hogy az index rekord tartalmazza csak az indexelt mező és egy mutatót, az eredeti lemez, ésszerű, hogy kevesebb lesz, mint a többszörös területén felvétel, amit jelez. Így maga az index kevesebb lemez egységek, mint az eredeti tábla, ezért minimális számú blokk hozzáférések. Vonatkozó rendszer index FIRSTNAME mező az alább felsorolt;

Megjegyzés. Pointerek a MySQL van egy hossza 2, 3, 4 vagy 5 bájt méretétől függően a táblázat.

Mivel a példakénti adatbázis r = 5.000.000 bejegyzéseket a index rekord hosszúságú R = 54 bájt és az alapértelmezett blokkméretet B = 1024 byte. Blokkoló faktor index BFR = (B / R) = 1024-1054 = 18 bejegyzések egy lemezegység. A blokkok száma tárolásához szükséges az index egyenlő N = (R / BFR) = 5000000/18 = 277.778 egység.

Mikor kell alkalmazni?

Tekintettel arra, hogy létrehoz egy indexet igényel további lemezterület (277778 blokkok plusz a fenti példából, a növekedés 28%), és hogy túl sok indexek okozhat kapcsolatos problémák a korlátozott mérete fájlrendszerek, meg kell gondolni alaposan kell kiválasztani a megfelelőt Golf indexelés.

Mivel a kódot csak, hogy gyorsítsák a keresést a megfelelő területen a nyilvántartások, egyértelmű, hogy az index mező csak a kimenetnél, lesz a hulladék tárhelyet és a feldolgozási idő alatt behelyezése vagy eltávolítása művelet, ezért el kell kerülni. Emellett, mivel a természet bináris keresés, fontos energia vagy egyediségét adatokat. Az indexelés a területen, amelynek kapacitása 2 osztanám az adatokat a felére, míg a teljesítményt 1000 visszatér 1000 bejegyzéseket. Ebben az alacsony hatásfok csökken a lineáris rendezés, és az optimalizáló kerüli el az index, ha a kapacitás kisebb, mint 30% -át a rekord számokat, így az index egy hulladék helyet.

Az első alkalommal olvastam, ez nagyon hasznos volt számomra. Köszönöm.

Azóta kaptam néhány ötletet a hiányzó létrehozása az index, ha felvesz egy táblázatot (UPDATE vagy INSERT) egyetlen index, akkor valójában két írási műveletek a fájlrendszerben. Egy adat táblázatok és egyéb adatokat az index (és annak alkalmazása (és - ha fürtözött - használata táblázatos adatok)). Ha a tábla és index találhatók ugyanazon a merevlemezen, ez több időt vesz igénybe. Így a táblázat nélkül az index (kupac) lehetővé teszi, hogy végezzen egy írási művelet gyorsabb. (Ha két index, akkor három írási műveletek, és így tovább. D.)

Meghatározása azonban két különböző helyen, két különböző merevlemezek az index adatok és a táblázat adatait csökkentheti / megszünteti a problémát a költségek növekedését az idő. Ez becslésére van szükség további csoportjait fájlokat a megfelelő fájlokat a merevlemezen, valamint a szükséges elhelyezése az asztalon / index, mint kívánatos.

A másik probléma a mutatók - töredezettség idővel behelyezésekor adatokat. Átszervezni segítségével, meg kell írni egy eljárást kell ezt csinálni.

Egyes esetekben egy csomó hasznosabb, mint egy asztal indexek,

Például: - Ha van egy csomó konkurens bejegyzéseket, de csak egy éjszakát olvasás munkaidőn kívül bejelentésére.

Ezen túlmenően, a differenciálás között fürtözött és nem fürtözött index rendkívül fontos.

Index - ez csak egy adatstruktúra, amely felgyorsítja a keresést egy adott oszlopban az adatbázisban. Ez a szerkezet általában b-fa, de lehet egy hash tábla, vagy más logikai szerkezetét.

Tegyük fel, hogy szeretnénk futtatni egy lekérdezést, hogy megtalálja az összes információt a munkavállalók, szinkronizált «Abc»?

Mi fog történni, anélkül index?

Adatbázis szoftver szó kellene vizsgálni minden egyes sort a Munkavállaló táblázatban, hogy kiderítse Employee_name ezen a vonalon «Abc». És mert szükségünk van minden sorban a neve «Abc» benne, nem tudjuk csak megáll keres, amint találunk csak egy sort a nevét «Abc», mert előfordulhat, hogy más vonalakon az ABC nevű. Így minden sorban az utolsó sorban meg kell találni - ez azt jelenti, hogy több ezer sornyi ebben a szcenárióban ellenőrizni kell az adatbázis, hogy megtalálják a vonalat a nevét «Abc». Ez az, amit az úgynevezett teljes táblázat vizsgálat

Ennek adatbázis index segítségével a teljesítmény

Az egész pont, amelynek kódja - felgyorsítja lekérdezések, jelentősen csökkentve a rekordok száma / a táblázat sorai a, meg kell tanulni. Index jelentése adatstruktúrát (általában ez a B-fát), amely tárolja a értéke lehet egy adott oszlopot a táblázatban.

Hogyan működik a B-tree index?

Ennek oka, hogy a B-fák legnépszerűbb adatszerkezetet az index, mivel hatásosak az időben - mint a keresés, eltávolítása és behelyezése végezhetjük logaritmikus időben. És még egy fontos ok, amiért a B-fákat gyakrabban használják, hogy a tárolt adatok a B-tree lehet válogatni. RDBMS általában meghatározza, hogy mely adatok szerkezete ténylegesen használják az index. De akkor meg bizonyos forgatókönyvek konkrét adatbázis-kezelő adatszerkezet, amely a használni kívánt adatbázis létrehozásához maga az index.

Hogyan működik az index a hash tábla?

Ennek az az oka, hogy használ hash-indexet, hogy a hash tábla rendkívül hatékony, amikor a megállapítás csak a következő értékeket. Így a kérések, mint az egyenlőség a húr, akkor nagyon gyorsan értékeket, ha egy hash index.

Például egy lekérdezést, amelyik a korábban tárgyalt, előnyös lehet a hash index létrehozott Employee_name oszlopban. Olyan eljárás működtető hashindex abban állna, hogy a tény, hogy egy oszlop értéke a kulcs a hash táblában, és a tényleges érték, amely leképezve e kulcsot egyszerűen egy mutatót egy sort az adattáblázatban. Mivel a hash tábla alapvetően egy asszociatív tömb, tipikus rekord nézne ki: «Abc => 0x28939», ami 0x28939 hivatkozás a sort a táblázat, ahol Abc memóriában tárolódnak. Keressen egy típusú érték «Abc» az index hash tábla, és visszaad egy hivatkozás egy sort a memóriában, nyilván sokkal gyorsabb, mint olvas az asztalnál, hogy megtalálja az összes sort a értéke «Abc» itt Employee_name oszlopban.

Hash tábla nem rendezni az adatszerkezetet, valamint számos típusú lekérdezések, amelyek hash index nem is segít. Tegyük fel például, szeretné tudni, hogy a személyzet, akik kevesebb, mint 40 éve. Hogy tehetted ezt, ha az index a hash tábla? Nos, ez nem lehetséges, mert a hash tábla csak arra jó a keresési kulcs-érték párból - ami azt jelenti, hogy a lekérdezések, amelyek próbára egyenlőség

Mi is pontosan az adatbázisban index? Szóval, most már tudjuk, hogy egy adatbázis index jön létre egy oszlop a táblázatban, és hogy az index tárolja az értékeket az adott oszlopban. De fontos megérteni, hogy az adatbázis nem tárolja az index értéke a többi oszlop a táblában. Például, ha létrehozunk egy index Employee_name oszlopban, az azt jelenti, hogy az értékek az oszlop és Employee_Age Employee_Address nem is tárolja az indexben. Ha csak tartani az összes többi oszlop az index, lenne, mint létrehozni egy másik példányát az egész asztal, ami foglalnak túl sok helyet, és nagyon hatékony.

Az adatbázis tudja, mikor kell használni az index? Ha egy lekérdezés, mint «SELECT * FROM WHERE Alkalmazott Employee_name =„Abc»az adatbázis ellenőrzi, hogy az index az oszlop (ok) kérik. Feltételezve, hogy Employee_name oszlop index létre rajta, akkor az adatbázis kell eldönteni, hogy érdemes használni az indexet keresni az ismeretlen értékek - mert van néhány olyan esetek, amikor valójában kevésbé hatékony felhasználását az adatbázis index. És jobb egyszerűen végig a teljes táblázatot.

Mi az értéke az index adatbázis?

Tart tér - és minél több az asztalon, annál több az indexét. Egy másik intézkedés a teljesítmény mutatók - az a tény, hogy minden alkalommal, hozzáadni, törölni, vagy frissítés sort a megfelelő táblázatot, ugyanazokat a műveleteket kell elvégezni, a mutató. Ne feledje, hogy az index tartalmaznia kell ugyanazt a naprakész adatokat, és minden, ami az oszlop (oszlopok) a táblázat, amely fedezi az index.

Általános szabály, hogy az index kell létrehozni a táblázatban, ha az adatok egy indexelt oszlop kérni fogják gyakran.

Index - ez nem egyszerűen az adatstruktúrát tárolt értékeket egy adott oszlop a táblázatban. Az index jön létre egy táblázatban oszlopban.

Tegyük fel, hogy szeretnénk futtatni egy lekérdezést, hogy megtalálja az összes információt a felhasználó neve „John”. Ha az alábbi lekérdezést futtatva.

Adatbázis szoftver szó kellene nézni minden sor a Felhasználói táblázatban látni, hogy a «John» Név ezen a vonalon. Beletelik egy csomó időt.
Itt az index segít „indexet használják, hogy gyorsítsák a keresési lekérdezések, drasztikusan csökkenti a rekordok száma / a táblázat sorai a, meg kell tanulni.”
Hogyan hozzunk létre index

Index értékek áll oszlopok (például: John) egy asztal, és hogy ezek az értékek vannak tárolva az adatstruktúra.
Tehát most az adatbázis fogja használni az indexet, hogy megtalálja a munkavállalók számára a nevét John, mert az index úgy tűnik, hogy név szerinti ABC sorrendben polzovateley.I mert válogatni, ami azt jelenti, hogy sokkal gyorsabb keresés, hiszen az összes nevet, kezdve «J» lesz egymás mellett az index!

Csak egy gyors javaslatot. Mivel indexelés érdemes további felvételt és a tárhelyet, így ha az alkalmazás több insert / update, akkor egy táblázat nélkül indexek, de ha több adatot igényel keresést, akkor kell menni az indexelt táblázatban.

Röviden, az index egy adatstruktúra, amely tárolja értékeit egy adott oszlop a táblázatban, hogy felgyorsítsa a keresésnek.

A klasszikus példája az „Index a könyvek”

Tekintsük a „Book” 1000 oldalas, osztva 100 szakaszra, minden szakaszt az X-oldalakat.

Most anélkül, hogy az index oldalon megtalálni egy adott szakaszt betűvel kezdődik «S», akkor nincs más választása, mint hogy átvizsgálja az egész könyvet. Ie 1000 oldal

De az index oldalon az elején van. És mégis, olvasni egy bizonyos részét, amelynek értéke, akkor csak meg kell emlékezni, hogy megtekinthesse az index oldalon újra és újra. Miután megtalálta a megfelelő index, akkor hatékonyan folytassa a rész, kihagyva a többi rész.

De aztán, amellett, hogy 1000 oldal, akkor többet kell

10 oldal megjelenítéséhez az index oldalon, úgy, hogy csak 1010 oldalt.

Így az index egy külön rész, amely tárolja az adatokat indexelt rekordok rendezett sorrendben hatékony kereséshez.

Azokban az iskolákban, minden egyszerű, nem igaz. P