Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Milyen kompromisszumok vannak az indexek és az asztali szkennelések használata között


Milyen kompromisszumok vannak az indexek és az asztali szkennelések használata között


Az indexek és a táblázatok elvégzésének két alapvető megközelítése az adatbázisban az adatok eléréséhez, mindegyik megkülönböztetett kompromisszumokkal, a helyzettől függően.

Az adatbázisban található index egy olyan adatszerkezet, amely lehetővé teszi a gyorsabb keresést, lehetővé téve a rendszer számára, hogy a sorok gyors megkeresésében legyen, anélkül, hogy a táblázat minden sorát beolvasnák. A legtöbb relációs adatbázis a B+ faszerkezeteket használja az indexekhez, amelyek kulccsal és mutatókat fák formájában szerveznek. Ez lehetővé teszi a $$ o (\ log n) $ $ logaritmikus idő komplexitásának keresése, beillesztéseit és deléciókat, ami általában sokkal gyorsabb, mint a teljes táblázat szkennelése $$ o (n) $ $ komplexitással. Az indexek csoportosíthatók vagy nem füstölhetők, a csoportosított indexekkel, amelyek az adatokat fizikailag rendezett sorrendben tárolják, javítva a tartomány-szkennelési teljesítményt az adatok módosításakor extra általános költségek árán. Az indexek kompozit, részleges, szűrt vagy hash-alapú, meghatározott lekérdezési mintákra is beállíthatók.

Ezzel szemben egy táblázatkapcs (vagy teljes asztali vizsgálat) a táblázat minden sorát egymás után olvassa el, függetlenül a lekérdezés szelektivitásától. Ez magában foglalja a táblázat összes adatblokkjának beolvasását, és gyakran a legdrágább hozzáférési módszernek tekintik, mivel a szükségesnél több adatot dolgozik fel. Az asztali vizsgálat azonban bizonyos esetekben jól teljesíthet. Például, amikor a lekérdezések nagy százalékot szereznek be, akkor az index (amely gyakran további kereséseket igényel a tényleges sorok további keresésére), meghaladhatja a teljes táblázat egyszeri szkennelésének költségeit. A táblázatok szkennelése több blokkolási leolvasást használhat, amelyek lehetővé teszik a kevesebb I/O művelettel rendelkező nagy adatrészek elolvasását, ezáltal csökkentve a késleltetést, összehasonlítva az index-szkennelések által véletlenszerűen megkövetelt sok blokk elolvasásával.

Az egyik fő kompromisszum magában foglalja a lekérdezés által visszaadott adatkészlet szelektivitását és méretét. Ha a lekérdezés kis számú sorra szűrődik (nagy szelektivitás), az indexek általában felülmúlják a táblázatok vizsgálatát, mivel csak a vonatkozó adatokhoz kell hozzáférniük. Ahogy a visszaadott sorok százalékos aránya növekszik, az index -szkennelések költsége növekszik, mivel több kulcsfontosságú keresésre lehet szükség, és az adatbázis -motornak további véletlenszerű I/O műveleteket kell végrehajtania. Néhány küszöbértéknél a táblázat sorának gyakran 10-20% -a, de az adatszélességtől és a hardvertől függően a teljes asztali vizsgálat hatékonyabbá válik. Ennek oka az, hogy a letapogatási költségek a szelektivitástól függetlenül állandóak, egyszerűen egyszer olvassák el a táblázatot.

Az index -szkennelések általában kevesebb oldalt olvasnak, mint egy asztali szkennelés, ha a fedett oszlopok kevesebb vagy kompaktabbak, mint a teljes asztali sorok. Például egy index csak az indexelt oszlopokat tartalmazhatja, a teljes táblázat soros adatainak nélkül, így vékonyabbá teszi, és lehetővé teszi, hogy több sor illeszkedjen az egyes adatbázisok oldalán. Ez csökkenti az I/O általános költségeket az index beolvasásakor, összehasonlítva a teljes táblázat adatainak beolvasásával. Ezenkívül egyes indexek szűrhetők (részleges indexek) a irreleváns sorok kizárására, tovább csökkentve a szkennelési lábnyomot.

Másrészt a teljes asztali vizsgálat kevesebb terhet ír az adatbázis karbantartási oldalán. Az indexek bevezetik az általános költségeket az adatmódosítási műveletek során, például a beszúrás, a frissítés és a törlés során. A táblázat minden változása megköveteli az indexek frissítését, néha megnövekedett írási késéssel és tárolással, különösen akkor, ha sok index létezik az asztalon. Ez a költségek befolyásolhatják a párhuzamosságot is, és vitatáshoz vezethetnek a nehéz írási környezetben. Így a táblázatok, amelyek egyszerűen elolvasják az adatokat természetes sorrendben, további szerkezeti karbantartás nélkül, elkerülik ezt a költséget.

Egy másik fontos szempont a gyorsítótárazás és a hardverjellemzők hatása. A táblázatok szkennelése előnyös a szekvenciális I/O -ból és az előkészítésből, lehetővé téve a rendszer számára, hogy hatékonyan olvassa el a több szomszédos blokkot, gyakran a memóriából, ha gyorsítótárba kerül. Ezzel szemben az index -szkennelések véletlenszerű I/O -t tartalmaznak az eltérő adatblokkok lekérésére, különösen akkor, ha az index -szkennelésnek meg kell keresnie a sor mutatóit a halom tárolóba. Ez az index -szkenneléseket lassabbá teheti a lassabb lemez véletlenszerű I/O teljesítményű rendszereken, bár az SSD -k és a nagy memória medencék szűkítik ezt a rést. A helyzet függhet olyan specifikumoktól is, mint a párhuzamosság és az adatbázis-motor többszálú képességei, ahol a párhuzamos asztali vizsgálat jelentősen növelheti az átviteli sebességet.

Ezenkívül a belső fragmentáció és a fizikai tárolási elrendezés befolyásolja a teljesítmény kompromisszumait. A halom-szervezett asztalok asztali vizsgálata továbbíthatja a továbbított nyilvántartásokat, ahol a sorok különböző oldalakra költöztek a frissítések miatt, a szkennelés hatékonyságának romlása miatt. A csoportosított indexek, amelyek a Key által rendelt adatokat tárolják, elkerülhetik ezt a problémát, és néha a "Táblázat -letapogatás" -ot egyenértékűvé teszik egy fürtözött index -szkenneléssel. Az előnyök azonban a drága sorok átrendezésének költségeivel járnak a nehéz adatgyűjtés során.

A lekérdezés-optimalizáló szempontból az index-szkennelés és a táblázatkaputatás közötti döntést általában költség-alapú becslési modellek végzik, figyelembe véve az adateloszlás, a sorszámok és a hardver költségeiről szóló statisztikákat. Az optimalizáló kiegyensúlyozza a CPU, I/O és a memória költségeit a leghatékonyabb hozzáférési út kiválasztásához. Ezeket a döntéseket olyan tényezők befolyásolhatják, mint a rendelkezésre álló memória, a gyorsítótárazási állapot és a lekérdezési minták. Nincs rögzített küszöb az egyik vagy a másik használata között; A keresztezési pont rendszerenként és munkaterhelésenként változik.

Összefoglalva: az indexek és a táblázatok használata közötti kompromisszumok a következőket tartalmazzák:

- Teljesítmény vs. adatmennyiség: Az indexek felülmúlnak, ha néhány sorra szűrik; Az asztali vizsgálat jobb lehet a nagy adatkereséshez.
- I/O minták: Az index -vizsgálat véletlenszerű I/O olvasmányokat okoz; A táblázatok szkennelése előnyös a szekvenciális I/O és a Multi Block Reads részéről.
- Karbantartási költségek: Az indexek növelik az írási működési költségeket az indexszerkezetek frissítései miatt; Az asztali vizsgálat nem végez ezt.
- Tárolási hatékonyság: Az indexek kompakt lehetnek, ha kevesebb oszlopot fednek le; A táblázatok beolvasása feldolgozza a teljes sorokat és potenciálisan több adatot.
- Gyorsítótárazási effektusok: A táblázatok vizsgálata hatékonyan használhatja az adatgyűjtést, különösen a nagy szekvenciális leolvasások esetén; Lehet, hogy az index -szkennelések nem részesülnek annyira a véletlenszerű hozzáférés miatt.
- Optimalizáló döntés: Költség-alapú lekérdezés Az optimalizálók dinamikusan választanak ezen opciók között a lekérdezési statisztikák és a munkaterhelés-specifikumok alapján.
- Az adatok elrendezésének hatása: A halomtáblák szankciókat okozhatnak, mint a továbbított nyilvántartások a szkennelés során; A csoportosított indexek fizikailag szervezik az adatokat, de növelik a frissítési költségeket.

A hatékony adatbázis -tervezés és a lekérdezés optimalizálása érdekében elengedhetetlen a gondos indexelési stratégia és a tudatosság kombinációja, mikor elfogadható vagy előnyösebb. Az indexek olyan hatékony eszközök, amelyek sok lekérdezést felgyorsítanak, de a tárolási és írási teljesítmény költségeivel járnak. Az asztali vizsgálat, bár látszólag brutális erő, továbbra is fontos a műveletekhez, amelyek nagy adatait visszakeresik, vagy ha az index lefedettsége alacsony. Az ezen mechanizmusok mögött meghúzódó árnyalatok megértése lehetővé teszi az adatbázis -rendszerek jobb hangolását és méretezését.