Hogyan adatbázis indexelése működik?

szavazat
1k

Tekintettel arra, hogy indexingolyan fontos, mint az adathalmaz méretének növekedése, tud valaki magyarázni, hogyan működik indexelési munkát egy database-agnosticszinten?

További információ a lekérdezéseket index mező, nézd meg Hogyan index egy adatbázis oszlop .

A kérdést 04/08/2008 11:07
a forrás felhasználó
Más nyelveken...                            


10 válasz

szavazat
2k

Miért van rá szükség?

Amikor az adatot a lemezen tárolt alapú tárolóeszközök, hogy tárolja a blokk adatok. Ezek a blokkok elérni a maguk teljességében, így az atomi lemez hozzáférési művelet. Lemezblokkot szerkezete ugyanúgy, mint kapcsolt listák; mindkettő tartalmaz egy szakaszt az adatok, egy mutatót a helyét a következő csomópont (vagy blokk), és mindkét nem kell folyamatosan tárolódnak.

Tekintettel arra, hogy a rekordok száma csak akkor rendezhetők egyetlen területen, azt mondhatjuk, hogy keres egy olyan területen, amely nem igényel rendezve lineáris keresés, amely megköveteli N/2blokk hozzáféréseket (átlagosan), ahol Na blokkok száma, amelyek a táblázat ível. Ha ez a mező nem kulcs mező (azaz nem tartalmaz egyedi bejegyzés), akkor a teljes tablespace kell keresni a Nblokk fér.

Mivel, rendezett területen, a bináris keresés alkalmazhatunk, amely log2 Nblokk fér. Továbbá mivel az adatok rendezése kap egy 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 a teljesítmény növelése jelentős.

Mi indexelés?

Az indexelés módja válogatás a rekordok száma több területen. Létrehozása index mező a tábla létrehoz egy másik adatszerkezet, amely birtokolja a mező értéke, és egy mutatót a rekord vonatkozik. Ez az index struktúra majd rendezve, így Binary keresések kell végrehajtani rajta.

A hátránya, hogy az indexelés, hogy ezek a mutatók további területet igényel a lemezen, hiszen az indexek együtt tárolja a táblát a MyISAM motor, ezt a fájlt gyorsan eléri a megengedett méretet a mögöttes fájlrendszer, ha több területen ugyanabban a táblázatban indexelése .

Hogyan működik?

Először is, nézzük vázlat minta adatbázis tábla séma;

Mező neve Adat típus Méret lemezen
id (elsődleges kulcs) unsigned int 4 bájtot
FIRSTNAME Char (50) 50 bájt
lastName Char (50) 50 bájt
EmailAddress Char (100) 100 bájt

Megjegyzés : char helyett a varchar, hogy lehetővé tegye a pontos mérete a lemezen értéket. Ez a minta adatbázis tartalmazza ötmillió sorok és indexálás. Az előadás több lekérdezések most lehet elemezni. Ezek a lekérdezés segítségével a id (a rendezve kulcs mező), és egyet a FIRSTNAME (a nem-kulcs szétválogatás nélkül kitölteni).

1. példa - rendezve vs szelektálatlan mezők

Mivel a minta adatbázis r = 5,000,000bejegyzések egy fix méretű, amely egy rekord hossza R = 204byte, és tárolja azokat egy táblát a MyISAM motor, amelyet az alapértelmezett blokk méretét B = 1,024byte. A blokkoló tényező az asztal lenne bfr = (B/R) = 1024/204 = 5jutó bejegyzések lemezblokk. A blokkok száma a szükséges tartani a táblázat N = (r/bfr) = 5000000/5 = 1,000,000blokkokat.

A lineáris keresés az id mező lenne szükség átlagosan N/2 = 500,000blokk fér találni egy értéket, mivel az id mező kulcsfontosságú területen. De mivel az id mező is rendezve, egy bináris keresést lehet végezni igénylő átlagosan log2 1000000 = 19.93 = 20blokk fér. Azonnal kiderül, hogy ez egy drasztikus javulást.

Most a FIRSTNAME mező nem kiválogatott sem kulcsfontosságú területén, így a bináris keresés lehetetlen, és nem azok az értékek, egyedi, és így a táblázat szükség lesz keresi a végén egy pontos N = 1,000,000blokk fér. Ez az a helyzet, hogy az indexelés célja, hogy javítsa.

Tekintettel arra, hogy az index rekord tartalmazza csak az indexelt mező és egy mutatót, az eredeti lemez, magától értetődik, hogy kisebb lesz, mint a multi-mező rekordot az mutat. Tehát maga az index igényel kevesebb lemez blokkok, mint az eredeti tábla, amely így kevesebbszer kell blokk hozzáférések végighaladni. A séma egy index a FirstName mező alábbiakban vázolt;

Mező neve Adat típus Méret lemezen
FIRSTNAME Char (50) 50 bájt
(Felvétel pointer) Special 4 bájt

Megjegyzés : mutatóeszközök a MySQL 2, 3, 4 vagy 5 bájt hosszúságú méretétől függően a táblázat.

2. példa - indexelés

Mivel a minta adatbázis r = 5,000,000rekordok az index rekord hossza R = 54bájt és az alap blokk méretét B = 1,024byte. A blokkoló tényező az index lenne bfr = (B/R) = 1024/54 = 18jutó bejegyzések lemezblokk. A blokkok száma a szükséges tartani az index N = (r/bfr) = 5000000/18 = 277,778blokkok.

Most a keresést a FIRSTNAME területén tudja használni az index a teljesítmény növelése érdekében. Ez lehetővé teszi a bináris keresés az index átlagosan log2 277778 = 18.08 = 19blokk hozzáférések. Ahhoz, hogy megtalálja a címet a tényleges rekord, ami egy további blokk hozzáférés olvasni, így összesen 19 + 1 = 20blokkolja a bejáratok, messze a 1.000.000 blokk hozzáfér találniuk kell egy FIRSTNAME mérkőzés a nem indexelt tábla.

Mikor kell használni?

Tekintettel arra, hogy létrehoz egy indexet igényel további lemezterület (277778 blokkok plusz a fenti példában a ~ 28% -os növekedés), és hogy túl sok indexek okozhat eredő kérdéseket fájlrendszerek mérethatárok, gondosan kell használni, hogy válassza ki a megfelelő mezők index.

Mivel indexek csak használják, hogy gyorsítsák fel a keresést a megfelelő területen belül nyilvántartást, magától értetődik, hogy mezőindexelés csak a kimenetnél lenne egyszerűen hulladék lemezterület és a feldolgozási idő, amikor egy betétet vagy törölni működését, így el kéne kerülni. Szintén jellege miatt a bináris keresés, a számossága vagy egyediségét az adatok fontosak. Az indexelés a területen egy számossága 2 osztanám az adatokat a felére, míg a számossága 1000 visszatér megközelítőleg 1000 rekordokat. Ilyen alacsony számosságú hatékonysága csökken egyenes sort, és az optimalizáló elkerülhető az index, ha a számossága kisebb, mint 30% -a rekordot, így gyakorlatilag az index egy hulladék helyet.

Válaszolt 04/08/2008 11:41
a forrás felhasználó

szavazat
168

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

Azóta kerestem némi betekintést a hátránya létrehozásának indexek: ha írsz egy táblázatot ( UPDATEvagy INSERT IGNORE ) egy index, akkor tulajdonképpen két írási műveleteket a fájlrendszerben. Az egyik a táblázat adatai és egy másikat az index adatok (és az igénybevétele is (és - amennyiben csoportosulnak - a folyamodás a táblázat adatait)). Ha tábla és index találhatók ugyanazon a merevlemezen ez többe időt. Így egy asztal nélküli index (a kupac), lehetővé tenné a gyorsabb írási műveleteket. (ha volt két index, amit a végén három írási műveletek, és így tovább)

Meghatározása azonban két különböző helyen, két különböző merevlemezek index adatok és táblázat adatai csökkentéséhez / megszünteti a problémát a megnövekedett költségek időben. Ehhez fogalom további fájl csoportok szerint a fájlokat a kívánt merevlemezek és meghatározása asztal / index helyét a kívánt módon.

Egy másik probléma, indexek szétforgácsolódottságuk idővel adatokat beilleszteni. REORGANIZEsegít, meg kell írni rutinok, hogy ez megtörtént.

Egyes forgatókönyvek egy halom hasznosabb, mint egy asztal indexek,

pl: - Ha sok vetekszik ír, de csak egy éjszakára olvasni az üzleti órákon kívül a bejelentésre.

Szintén különbségtételt fürtözött és nem fürtözött indexek meglehetősen fontos.

Segített: - Mit Clustered és nem fürtözött index valójában?

Válaszolt 30/04/2013 15:31
a forrás felhasználó

szavazat
124

Az index csak egy adatstruktúra, ami a keresés gyorsabb egy adott oszlop egy adatbázisban. Ez a szerkezet általában egy b-fa vagy egy hash tábla, de lehet bármilyen más logikai szerkezetét.

További információért, ajánlom: Hogyan adatbázis indexek működnek? És hogyan indexek segíteni?

Válaszolt 20/02/2014 15:40
a forrás felhasználó

szavazat
18

Csak egy gyors javaslatot .. Mint indexelés költségek akkor további írások és a tárhelyet, így ha az alkalmazás több betétet / frissítési művelet, akkor érdemes használni, táblák nélkül indexek, de ha többre van szükség, adatok visszakeresése műveleteket, akkor menjen az indexelt asztal.

Válaszolt 14/01/2015 06:44
a forrás felhasználó

szavazat
40

Egyszerű Leírás !!!!!!!!!!

Az index nem más, mint egy adatstruktúra, amely tárolja az értékeket egy adott oszlop a táblázatban. Egy index jön létre oszlopon tábla.

Például, van egy adatbázis tábla nevű felhasználó három oszlop - név, életkor és címe. Tegyük fel, hogy a felhasználó tábla ezer sort.

Most tegyük fel, hogy szeretnénk futtatni egy lekérdezést, hogy megtalálja a részleteket minden olyan felhasználó, aki neve „John”. Ha az alábbi lekérdezést futtatva.

SELECT * FROM User 
WHERE Name = 'John'

Az adatbázis-kezelő szoftverek szó szerint meg kell nézni minden egyes sorban a Felhasználói táblázatban, hogy ha a neve az adott sor „John”. Ez hosszú időt vesz igénybe.
Ez az, ahol index segít „indexet használják, hogy gyorsítsák fel keresési lekérdezéseket lényegében kivágása a rekordok száma / a táblázat sorai a hogy meg kell vizsgálni.”
Hogyan hozzunk létre egy indexet

CREATE INDEX name_index
ON User (Name)

Az index áll oszlopban (Pl: John) egy asztal, és hogy ezek az értékek vannak tárolva egy adatstruktúrában.
Tehát most az adatbázis fogja használni az indexet, hogy megtalálja az alkalmazottak, John, mert az index feltehetőleg betűrendbe lehet rendezni a felhasználók nevét. És mert van rendezve, ez azt jelenti, keres egy név sokkal gyorsabb, mert minden kezdődő nevek a „J” lesz jobb egymás mellett az index!

Válaszolt 02/08/2016 01:30
a forrás felhasználó

szavazat
86

Most tegyük fel, hogy szeretnénk futtatni egy lekérdezést, hogy megtalálja a részleteket minden alkalmazottak, akik neve „Abc”?

SELECT * FROM Employee 
WHERE Employee_Name = 'Abc'

Mi történne nélkül index?

Adatbázis szoftver szó szerint meg kell nézni minden egyes sorban a Munkavállaló asztalra, hogy ha a Employee_name e sor „Abc”. És mert azt akarjuk, minden sorban neve „Abc” benne, akkor nem csak megáll keresett egyszer találunk csak egy sort neve „Abc”, mert nem lehet más sorok a nevét Abc . Tehát minden sorban egészen az utolsó sorban meg kell keresni - ami azt jelenti, több ezer sorból ebben a forgatókönyvben meg kell vizsgálni az adatbázis, hogy megtalálják a sorok neve „Abc”. Ez az, amit az úgynevezett teljes táblázat vizsgálat

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

Az egész pont, amelynek index, hogy gyorsítsák fel keresési lekérdezéseket lényegében kivágása a rekordok száma / a táblázat sorai a, amelyeket meg kell vizsgálni. Az index egy adatstruktúra (leggyakrabban a B- fa), amely tárolja az értékeket egy adott oszlopot a táblázatban.

Hogyan B-fák index működik?

Az ok, B- fák a legnépszerűbb adatstruktúrát indexek annak a ténynek köszönhető, hogy azok időben hatékony - mert look-up, törlések és beszúrások minden történhet logaritmikus időben. És a másik fő ok B- fák gyakrabban használják, mert az adatokat tárolnak benne a B- fa lehet válogatni. A RDBMS jellemzően meghatározza, hogy melyik adatstruktúrát ténylegesen felhasznált egy index. De bizonyos forgatókönyvek bizonyos RDBMS-k, akkor valóban meghatározza, hogy milyen adatok szerkezete szeretné adatbázist használja, ha létrehoz maga az index.

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

Az ok hash mutatókat használnak azért van, mert hash táblák rendkívül hatékony, amikor csak keresi fel értékeket. Tehát, lekérdezések, hasonlítsa össze az egyenlőség a string lehet letölteni értékek nagyon gyors, ha egy hash index.

Például a lekérdezés a korábban tárgyalt hasznot húzhat hashindex létre a Employee_name oszlopra. Az, hogy egy hash index működne az, hogy az oszlop értéke lesz a kulcs a hash tábla és a tényleges érték leképezve a kulcs még csak egy pointert a sort a táblázat adatainak. Mivel a hash tábla alapvetően egy asszociatív tömb, egy tipikus bejegyzés a következőképpen néz ki: „Abc => 0x28939", ahol 0x28939 utalás táblázatsor ahol Abc memóriában tároljuk. Felnézett az érték, mint a „Abc” egy hash tábla index és kapok vissza egy hivatkozás a sorban a memóriában nyilvánvalóan sokkal gyorsabb, mint a szkennelés az asztalra, hogy megtalálja az összes sort, amelynek értéke „Abc” a Employee_name oszlopban.

A hátrányok hashindex

Hash táblák nem rendezve adatstruktúrák, és nagyon sok fajta lekérdezések hash indexek nem is segít. Tegyük fel például, azt szeretnénk, hogy megtudja, az összes, a munkavállalók, akik kevesebb, mint 40 éves. Hogy tehetted ezt a hash tábla index? Nos, ez nem lehetséges, mert a hash tábla csak arra jó, felnézett kulcs-érték párból - ami azt jelenti, hogy a lekérdezések ellenőrizze egyenlőségre

Mi is pontosan a belsejében egy adatbázis index? Szóval, most már tudjuk, hogy egy adatbázis index létrejön egy oszlop a táblázatban, és hogy az index tárolja az értékeket az adott oszlopban. De fontos, hogy megértsük, hogy az adatbázis index nem tárolja az értékeket a többi oszlop a táblában. Például, ha létrehozunk egy indexet a Employee_name oszlopban, ez azt jelenti, hogy a Employee_Age és Employee_Address oszlop értékeit nem is tárolja az indexben. Ha nem csak tárolja az összes többi oszlop az index, akkor lenne, mint ami egy másik példányát az egész asztalon - ami venne fel túl sok helyet, és nagyon hatékony.

Hogyan adatbázist tudja, mikor kell használni az index? Ha egy lekérdezés, mint „SELECT * FROM WHERE Alkalmazott Employee_name = 'Abc” fut, akkor az adatbázis ellenőrzi, hogy van olyan index az oszlop (ok) A lekérdezett. Feltételezve, hogy a Employee_name oszlopban nincsenek az index létre rajta, akkor az adatbázis kell eldönteni, hogy valóban van értelme használni az indexet, hogy megtalálja az értékeket keresett -, mert vannak olyan esetek is, amikor valójában kevésbé hatékony az adatbázis használatát index és hatékonyabb csak olvasni az egész táblát.

Mi az a költség, amely adatbázis index?

Tart tér - és a nagyobb asztalnál, annál nagyobb az index. Tovább teljesítmény hit indexek az a tény, hogy ha van hozzá, törölni, vagy frissítés sort a megfelelő táblázatot, ugyanazokat a műveleteket kell elvégezni, hogy az index. Ne feledje, hogy az index tartalmaznia kell ugyanazt a naprakész adatok bármi is van a tábla oszlop (ok), amely az index magában foglalja.

Általános szabály, hogy az index csak akkor kell létrehozni az asztalra, ha az adatokat az indexelt oszlop lekérdezésre kerül gyakran.

Lásd még

  1. Mi oszlopokat általában, hogy jó indexek?
  2. Hogyan adatbázis indexek működnek
Válaszolt 13/08/2016 18:36
a forrás felhasználó

szavazat
14

Gondoljunk csak a Database Index Index egy könyvet. Ha van egy könyvet a kutyákról és szeretne találni információt mondjuk a német juhász, akkor természetesen lapozhat az összes oldalt a könyvet, és megtalálja, amit keres, de ez persze időigényes és nem túl gyors. Egy másik lehetőség az, hogy akkor is csak megy az Index rész a könyv, majd megtalálja, amit keres felhasználásával A szervezet neve, amit keres (ebben az esetben a német juhász), valamint nézi a oldalszámot gyorsan megtalálja, amit keres. Az adatbázis az oldalszám nevezzük egy mutatót, amely irányítja az adatbázist a címet a lemezen, ahol egység található. Ugyanezzel a német juhász analógia tudtunk volna valami ehhez hasonlót ( „német juhászkutya”, 0x77129) ha 0x77129 a címe a lemezen, ahol a sor adatait német juhászkutya van tárolva.

Röviden, az index egy adatstruktúra, amely tárolja az értékeket egy adott oszlop a táblázatban, hogy gyorsítsák fel a következő lekérdezési.

Válaszolt 21/12/2016 17:16
a forrás felhasználó

szavazat
64

Klasszikus példa „Index Könyvek”

Vegyünk egy „könyv”, 1000 oldalas, 100-zal osztva, minden rész szakasz X oldalakon.

Egyszerű, nem?

Most anélkül, hogy az index oldalon talál egy adott szakaszt, hogy kezdődik a „S” betű, akkor nincs más választása, mint olvas az egész könyvet. azaz: 1000 oldal

De egy index oldal elején, ott van. És még, hogy olvassa el különösebb részén, ami számít, akkor csak meg kell, hogy nézd át az index oldalon, újra és újra, minden alkalommal. Miután megtalálta a megfelelő index segítségével hatékonyan ugorhat a szakasz kihagyásával egyéb szakaszok.

De aztán, amellett, hogy 1000 oldal, szüksége lesz egy másik ~ 10 oldalt, hogy megjelenjen az index oldalon, így teljesen 1010 oldalas.

Így az index egy különálló rész, amely tárolja értékeit indexelt oszlop + mutató az indexelt sorban egy rendezetten hatékony look-up.

A dolgok egyszerűen az iskolákban, nem igaz? : P

Válaszolt 23/04/2017 14:43
a forrás felhasználó

szavazat
7

SQL index valami kapcsolódó gyorsulást a keresést SQL Database. Index lehetővé teszi programozó adatokat letölteni adatbázis nagyon gyors. Tegyük fel, hogy egy diák, vagy valamilyen könyv olvasó. A könyv tartalmaz 50.000 oldalakon. Első nap elolvassa néhány téma „ABC” másnap el szeretné olvasni néhány másik téma „xyz”. akkor soha nem kézzel megy keresztül oldalanként. Mit fog tenni ebben a helyzetben, hogy használja Book index nézni az egyes konkrét témát, majd ugrás közvetlenül a témában. Index mentette meg sok idő, hogy keresni a témában. Ugyanaz az SQL, index lehetővé teszi, hogy keressen millió lemezt nagyon gyorsan tárol.

Válaszolt 15/02/2018 10:17
a forrás felhasználó

szavazat
2

Egy adatbázis index egy adatstruktúra, amely javítja a sebesség adatok lehívása műveletek egy adatbázis tábla árán további írások és a tárhelyet fenntartani az index adatok szerkezetét. Az indexek használatával gyorsan megtalálhatja az adatokat anélkül, hogy keressen minden sorban egy adatbázis tábla minden alkalommal, amikor egy adatbázis tábla hozzáférni. Az indexek segítségével lehet létrehozni egy vagy több oszlopot egy adatbázis tábla, amely alapján az engedély gyors véletlenszerű kereséseket és hatékony hozzáférést a megrendelt rekordokat.

Válaszolt 09/07/2018 05:33
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more