Mysql - mysql hogyan működnek indexek

SELECT * FROM tag WHERE id = '1' - miért az index gyorsabban? Hogy ez az index csinál itt? - good_evening május 20 '17 18:00

Elvileg az index táblázat működik, mint egy index egy könyvben (ahol a név jött):







Tegyük fel, hogy van egy könyvet adatbázisok, és szeretné megtalálni néhány információt, mondjuk, egy tároló. Az index nélkül (anélkül, hogy bármilyen más segítséget, mint például a tartalomjegyzék) van, hogy menjen végig az oldalakat egyesével, amíg meg nem találja a témát (ez a teljes táblázatot scan). Másrészt, az index egy listát a kulcsszavak, ezért olvassa el az index, és milyen tárolási említi oldalakon 113-120, 231 és 354. Akkor váltani ezeket az oldalakat közvetlenül, anélkül, hogy keressen (Search index némileg gyorsabb).

Persze, hogy hasznos az index sok mindentől függ - néhány példa a fent összehasonlítás:

  • Ha van egy könyvet tárol és indexelve a „adatbázis”, látni fogja, hogy ez említett oldalakon 292-400 és 1-59,61-290. Ebben az esetben az index nem nagyon hasznos, és gyorsan fogadhatja az oldalt egymás után (az adatbázis egy „alacsony szelektivitás”).
  • Egy 10 oldalas könyv nincs értelme, hogy az index eredményeként akkor kap egy 10 oldalas könyvet előtaggal 5 oldalas index, ez csak buta - csak ellenőrzi a 10 oldalt, és tenni vele,
  • Az index szintén hasznosak lehetnek - általában nincs értelme index, például a frekvencia a levél «L» az oldalon.

Válaszol Piskvor május 20 '17 18:00

Az első dolog, amit tudnia kell, hogy az indexek - a módja, hogy elkerüljük a teljes táblázat vizsgálat, hogy az eredmény, amit keres.

Vannak különböző típusú indexek, és azok végrehajtását szintjén tároló, így közöttük nincs egységes, és ők is függ használ tároló motort.

InnoDB és B + fa index

Mert InnoDB a leggyakoribb típus a mutató index alapján B + fa, amely tárolja az elemeket rendezett sorrendben. Ezen felül, akkor nem kell menni egy igazi asztal, hogy az indexelt értékek, ami felgyorsítja a kérését.

„A probléma” az ilyen típusú index, hogy meg kell kérni a baloldali érték, hogy használja az indexet. Tehát, ha az index két oszlopa van, mondjuk last_name és first_name a sorrend, amelyben kéri, hogy e mezők nagy jelentősége van.

Tehát, mivel a következő táblázat tartalmazza:

Ez a lekérdezés fogja használni az indexet:

De a következő nem lesz

Mert először kér first_name oszlop. de ez nem a bal szélső oszlopban az index.

Ez utóbbi példa még ennél is rosszabb:

Mert most csak összehasonlítjuk a jobb oldali része a jobb szélső mező az index.

A hash index

Ez egy másik index típusa, amely, sajnos, csak támogatja a backend tárolására. Ez a gyors, de ez csak akkor hasznos, hogy az összes eddigi keresés, ami azt jelenti, hogy nem tudja használni a különböző műveletekhez, mint például a>. <или LIKE.

Mert csak akkor működik, belső memória, akkor valószínűleg nem fogja használni, hogy nagyon gyakran. A fő esemény, ami azt hiszem most az egyik, hogy hozzon létre egy ideiglenes táblát a memóriában egy sor eredmények másik válasszuk valamint számos más mintákat az ideiglenes tábla segítségével egy hash index.

Ha van egy nagy területen VARCHAR. akkor „versenyez” a használata a hash index segítségével B-fát, ami egy másik oszlopot tartása nagy hash értékeket. Tegyük fel, hogy tárolja url a dobozban, és az értékek elég nagy. Ön is létrehozhat egy egész területén elemzi url_hash és a hash függvény CRC32 vagy bármilyen más típusú hash függvény hash url behelyezésekor. És akkor, amikor meg kell kérni ezt az értéket, akkor valami hasonlót:

A probléma a fenti példa az, hogy mivel a CRC32 funkciót generál hash meglehetősen kicsi, akkor a találkozás nagyszámú ütközés a kivonatolt értékeket. Ha szüksége van a pontos értékeket, akkor oldja meg a problémát a következő módon:

Azt azonban érdemes a hash dolgokat, még ha a szám ütközés magas, mert akkor csak a második összehasonlítás (string) ismételt hash-eket.

Sajnos ezzel a módszerrel, akkor is kell, hogy egy táblázatban hasonlítja össze a pályát url.

betakar

Néhány tény, hogy azt szeretné, hogy minden alkalommal, amikor akar beszélni optimalizálás:

Integer összehasonlítás sokkal gyorsabb, mint húr összehasonlításokat. Ez szemléltethető a példája emulációs hash index InnoDB.







Adhat további lépéseket a folyamat így gyorsabb, nem lassabb. Ezt szemlélteti az a tény, hogy ha lehet optimalizálni SELECT. osztja azt két szakaszban, így az első közülük tárolja az értéket az újonnan létrehozott táblázatot a memóriában, majd hajtsa végre a nehezebb igényeit ez a második táblázatban.

MySQL más indexek, de azt gondolja, hogy a B + fa a leggyakrabban használt és a hash-egyikük jól ismert, de megtalálható más a MySQL dokumentációt.

Azt ajánlom, hogy olvassa el a könyvet „High Performance MySQL”, a válasz egyértelműen fenti alapján ő fejezetet indexek.

Válaszol clarete május 20 '17 18:00

Ezekben az esetekben a haszon lesz a következő kérdéseket: 1. SELECT last_name, first_name emberről WHERE last_name = "Constantine" 2. SELECT last_name, first_name emberről WHERE last_name LIKE "% Constantine" - Akshay Taru május 20 '17 18:00

Felemeltem, hogy a minősítés, mert te voltál a 127., és a válasz №1 - a 256. nem tudtam csinálni mindent szép és tiszta, a bináris módon. - pbarney május 20 '17 18:00

Ez új információ volt számomra: „A sorrend, amelyben kéred ezeken a területeken nagyon fontos.” Köszönöm. - Khatri május 20 '17 18:00

Szeretem ezt a választ, mint az elfogadott választ. köszönhetően - Rahul Goyal május 20 '17 18:00

Szóval, mi az index? Nos, az index - egy adatstruktúrát (leggyakrabban ez B-fa), amely tárolja értékeit egy adott oszlop a táblázatban. Az index jön létre egy táblázatban oszlopban. Így meg kell jegyezni, hogy az index áll az oszlop értékeit egy asztal és hogy ezek az értékek vannak tárolva az adatok szerkezetét. Index - adatstruktúrát - emlékszik erre.

Kezdjük bemutató, és megmagyarázza, hogy miért kell egy adatbázis index, miután megy keresztül egy nagyon egyszerű példát. Azt feltételezzük, hogy van egy adatbázis tábla úgynevezett Dolgozói három oszlop - Employee_name, Employee_Age és Employee_Address. Tegyük fel, hogy a Munkavállaló tábla ezer sort.

Tegyük fel, hogy szeretnénk futtatni egy lekérdezést, hogy megtalálja a részleteket minden alkalmazottak, akik neve "Jézus? Ezért úgy döntöttünk, hogy egy egyszerű lekérdezést, mint ez:

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

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

Mi adatstruktúra egy index?

B-fák a leggyakrabban használt adatszerkezeteket az index. Az ok, amiért a fák B a legnépszerűbb adatstruktúrát indexek kapcsolódó tény, hogy azok hatékonyak időben - például 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 bizonyos forgatókönyvek konkrét RDBMS, akkor valóban meghatározza az adatstruktúra szeretné használni az adatbázist létrehozni az index is.

Az index javítja a teljesítményt?

Hogyan hozzunk létre egy indexet az SQL:

Itt van, amit a tényleges SQL fog kinézni, hogy hozzon létre egy indexet Employee_name oszlopban a fenti példánkban:

Hogyan lehet létrehozni egy index több oszlop az SQL:

Azt is létrehoz egy indexet a két Alkalmazott táblázat oszlopait, ahogy ebben az SQL:

Válaszol Pankaj katiyar május 20 '17 18:00

@ User64141 Ideális esetben ez az index csökkentésére használják a keresési idő. Azt mondta, hogy a végén a nap az érték kerül kiválasztásra a pontos szöveg. Nem lehet őket egy részét az index. Ha azt szeretnénk, hogy keressen több értéket egy oszlop, akkor lehet, hogy egy kompozit index. Még sor szelekciót végzünk csak itt, az értékek közül az eredeti vonal. - Karthikeyan május 20 '17 18:00

adatbázis index, vagy egyszerűen index segít, hogy felgyorsítsa az adatok beérkezésének táblázatok. Ha az Ön által kért adatokat a táblázat első, MySQL ellenőrzi, hogy vannak-kódok, akkor a MySQL használja az indexet, hogy válassza ki a pontos fizikai megfelelő sort a táblázatba helyett végigolvasni a teljes táblázatot.

adatbázis index hasonlít a könyv index. Ha azt szeretnénk, hogy talál egy témát az éppen megtekintett első index, majd nyissa meg az oldalt a téma, és nem nézett az egész könyvet.

Azt javasoljuk, hogy hozzon létre egy indexet az oszlopok a táblázatban, ahonnan a gyakran használt adatokat. Felhívjuk figyelmét, hogy az elsődleges kulcs oszlopok a fő index a táblázat automatikusan.

Ha az index segít felgyorsítani a kérelmek feldolgozását, miért nem használja az indexet bármely oszlop? Ha létrehoz egy indexet az egyes oszlop, MySQL kell létrehozni és fenntartani az index táblázat. Amikor abban változás történt a naplóba, MySQL kell újjáépíteni az index, ami időt vesz igénybe, és csökkenti a teljesítményt az adatbázis szerver. Létrehozása MySQL index

Gyakran létre indexek létrehozásakor táblázatokat. MySQL automatikusan hozzáadja az index egy oszlop bejelentett elsődleges kulcsot, KEY, egyedi, vagy indexet. Ezen felül, akkor adjunk hozzá indexek egy táblázat, amely már rendelkezik adatokkal.

Ahhoz, hogy hozzon létre az index, akkor használja a CREATE INDEX utasítás. Lentebb CREATE INDEX szintaxis: 1 2 3

Először is, meg kell adnod egy index alapján az asztal vagy a tároló motor:

EGYEDI azt jelenti, hogy a MySQL létre fog hozni egy olyan kikötés, hogy minden érték az index egyedülálló. Duplikált NULL érték engedélyezett valamennyi tároló rendszerek, amellett, hogy a BDB. FULLTEXT indexek támogatottak csak MyISAM tároló motort és csak akkor elfogadott, az oszlop, amely az adatok CHAR, VARCHAR vagy szöveget. Térindex támogatja a térbeli oszlop és a rendelkezésre álló tároló motort MyISAM. Ezen túlmenően, az oszlop értéke nem lehet NULL.

Akkor hívja az index és a típus után a kulcsszót, például B-fán alapuló, hasis, vagy RTREE alapján a táblázat tároló motor.

Az alábbi táblázat a tárolórendszerek, rendre engedélyezett típusú indexek: a megengedett adattípusokat áruház indexek MyISAM B-fán alapuló, RTREE InnoDB B-fán alapuló MEMORY / HEAP hash, B-fán alapuló NDB hash

Harmadszor, akkor bejelenti a táblázat nevét és az oszlop listáját, amit hozzá kíván adni az indexet. Egy példa létrehozásának index MySQL

A minta-adatbázis, akkor adjunk hozzá egy oszlopot officeCode alkalmazottak táblázat az index a CREATE INDEX utasítás az alábbiak szerint: 1

CREATE INDEX officeCode az alkalmazottak (officeCode)

Amellett, hogy létre az index, akkor is törölni az index a DROP INDEX utasítás. Érdekes, hogy a DROP INDEX utasítás is leképezve ALTER TABLE utasítás. Az alábbiakban az eltávolítása az index szintaxis: 1

DROP INDEX index_name ON táblanév

Például, ha azt szeretnénk, hogy törölje az index officeCode alkalmazottak tábla, amit teremtett a fenti, akkor futtassa a következő lekérdezést: 1

DROP INDEX officeCode az alkalmazottak

Válaszol sheriff május 20 '17 18:00




Kapcsolódó cikkek