SQLShack (Magyar)
Az indexeket az SQL Server lekérdezési folyamatának felgyorsítására használják, ami magas teljesítmény. Hasonlóak a tankönyvindexekhez. A tankönyvekben, ha egy adott fejezethez kell menni, akkor az indexhez megy, megtalálja a fejezet oldalszámát, és közvetlenül arra az oldalra lép. Tárgymutatók nélkül a kívánt fejezet megkeresésének folyamata nagyon lassú lett volna.
Ugyanez vonatkozik az adatbázisok indexeire is. Indexek nélkül a DBMS-nek végig kell járnia a táblázat összes rekordját a kívánt eredmények lekérése érdekében. Ezt a folyamatot asztali szkennelésnek hívják, és rendkívül lassú. Másrészt, ha indexeket hoz létre, akkor az adatbázis először ehhez az indexhez megy, majd közvetlenül lekéri a megfelelő táblarekordokat.
Az SQL Server kétféle típusú indexet tartalmaz:
- fürtözött index
- nem fürtözött index
Fürtözött index
A fürtözött index meghatározza az adatok fizikai táblázati sorrendjét. A táblázat adatait csak módon lehet rendezni, ezért táblánként csak egy fürtözött index lehet. Az SQL Server szolgáltatásban az elsődleges kulcs korlátozása automatikusan létrehoz egy fürtözött indexet az adott oszlopban.
Vessünk egy pillantást. Először hozzon létre egy “hallgató” táblázatot az “schooldb” belsejében a következő parancsfájl végrehajtásával, vagy győződjön meg arról, hogy az adatbázis teljes biztonsági másolatot tartalmaz, ha élő adatait használja:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
ADATBÁZIS LÉTREHOZÁSA schooldb
TÁBLÁZAT LÉTREHOZÁSA
(
id INT PRIMÁLIS KULCS,
név VARCHAR (50) NEM NULL,
nem VARCHAR (50) NULL,
DOB dátumidő NULL,
total_score INT NOT NULL,
város VARCHAR (50) NULL
)
|
Megjegyzés itt a “hallgató” táblázatban feltettük a primákat ry kulcsfontosság az “id” oszlopban. Ez automatikusan létrehoz egy fürtözött indexet az “id” oszlopban. Az adott tábla összes indexének megtekintéséhez hajtsa végre az “sp_helpindex” tárolt eljárást. Ez a tárolt eljárás paraméterként fogadja el a tábla nevét, és lekéri a tábla összes indexét. A következő lekérdezés beolvassa a diáktáblán létrehozott indexeket.
1
2
3
4
5
|
HASZNÁLAT schooldb
VÉGREHAJT sp_helpindex tanuló
|
A fenti lekérdezés ezt az eredményt adja vissza:
index_neve | index_leírás | index_kulcsok |
PK__student__3213E83F7F60ED59 | fürtözött, egyedi, elsődleges kulcs, amely az ELSŐDLEGES | id helyen található |
A kimenetben az egyetlen index látható. Ez az az index, amelyet az “id” oszlop elsődleges kulcskorlátozása miatt automatikusan hoztak létre.
Ez a fürtözött index a rekordot a hallgatói táblában tárolja az “id” növekvő sorrendjében. Ezért, ha a beillesztett rekord azonosítója 5, akkor a rekord az első sor helyett a táblázat 5. sorába kerül. Hasonlóképpen, ha a negyedik rekord azonosítója 3, akkor a negyedik sor helyett a harmadik sorba kerül. Ennek oka, hogy a fürtözött indexnek meg kell őriznie a tárolt rekordok fizikai sorrendjét az indexelt oszlopnak megfelelően, azaz az id. A sorrend működésének megtekintéséhez hajtsa végre a következő parancsfájlt:
A fenti szkript tíz rekordot illeszt be a tanuló táblázatába. Figyelem: itt a rekordok véletlenszerű sorrendben kerülnek beillesztésre az “id” oszlop értékei közé. De az id oszlop alapértelmezett fürtözött indexe miatt a rekordokat fizikailag az “id” oszlop értékeinek növekvő sorrendjében tárolják. Hajtsa végre a következő SELECT utasítást a rekordok lekéréséhez a diáktáblából.
1
2
3
4
5
|
schooldb
KIVÁLASZTÁS * FROM hallgatóból
|
A rekordok a következő sorrendben lesznek letöltve:
Egyéni fürtözött index létrehozása
Saját egyéni indexet, valamint az alapértelmezett fürtözött indexet is létrehozhat. Új táblázatos index létrehozásához először törölnie kell az előző indexet.
Az index törléséhez lépjen az “Object Explorer- > adatbázisok- > Database_Name- > Táblázatok- > Táblázatnév – > Indexek”. Kattintson a jobb gombbal a törölni kívánt indexre, és válassza a Törlés lehetőséget . Lásd az alábbi képernyőképet.
Most, új fürtözött index létrehozásához hajtsa végre a következő parancsfájlt:
1
2
3
4
5
6
|
schooldb használata
FÜGGÖZÖTT MUTATÓ LÉTREHOZÁSA IX_tblStudent_Gender_Score
ON hallgató (gender ASC, total_score DESC)
|
A folyamat A klaszterezett index egy kivétellel hasonló a normál indexhez. Fürtözött index esetén az “INDEX” előtt a “CLUSTERED” kulcsszót kell használnia.
A fenti szkript egy “IX_tblStudent_Gender_Score” nevű fürtözött indexet hoz létre a hallgató táblán. Ez az index a “gender” és “total_score” oszlopokban jön létre. Egynél több oszlopon létrehozott indexet hívunk “összetett index”.
A fenti index először az összes rekordot a nem növekvő sorrendjében rendezi. Ha a nem két vagy több rekordnál megegyezik, a rekordok az “összes_pontszám” oszlopban található értékek csökkenő sorrendjében vannak rendezve. Fürtözött indexet is létrehozhat egyetlen oszlopban. Most, ha az összes rekordot kiválasztja a diáktáblázat, a következő sorrendben kapjuk meg őket:
Nem fürtözött indexek
A nem fürtözött index nem rendezi a táblázatban lévő fizikai adatokat. a nem fürtözött indexeket egy helyen tárolják, a táblázatok adatait pedig egy másik helyen tárolják. Ez hasonló egy tankönyvhez, ahol a könyv tartalma egy helyen, az index pedig egy másik helyen található. Ez lehetővé teszi több nem fürtözött index táblánként.
Itt fontos megemlíteni, hogy a táblázatban az adatokat egy fürtözött index rendezi. Azonban a nem fürtözött indexen belül az adatokat a megadott sorrendben tároljuk. oszlopértékek, amelyekhez az index létrejön, és annak a rekordnak a címe, amelyhez az oszlopérték tartozik.
Amikor lekérdezést adnak ki egy oszlopra vonatkozóan, amelyen az indexet létrehozták, az adatbázis először az indexhez megy, és megkeresi a táblázat megfelelő sorának címét. Ezután arra a sorcímre megy, és lekér más oszlopértékeket. Ennek a további lépésnek köszönhető, hogy a nem fürtözött indexek lassabbak, mint a fürtözött indexek.
Nem fürtözött index létrehozása
A nem fürtözött index létrehozásának szintaxisa hasonló a hogy a fürtözött index. Nem fürtözött index esetén azonban a “NEM TÖRTÉNŐ” helyett a “NEM TETT” szót kell használni. Vessen egy pillantást a következő szkriptre.
1
2
3
4
5
6
|
use schooldb
NEM TETT INDEX IX_tblStudent_Name
ON hallgató (ASC név)
|
A fenti szkript nem fürtözött indexet hoz létre a diáktábla “név” oszlopában. Az index név szerint rendeződik. növekvő sorrendben. Mint korábban említettük, a táblázat adatait és indexét különböző helyeken tároljuk. A tábla rekordokat egy fürtözött index rendezi, ha van ilyen. Az index a definíciója szerint lesz rendezve, és külön tárolódik az asztaltól.
Tanulói tábla adatai:
IX_tblStudent_Name Index adatok
név | sorcím |
Alan | sorcím |
Elis | sorcím |
vidám | sorcím |
Jon | sorcím |
Joseph | sorcím |
Kate | sorcím |
Laura | sorcím |
Egerek | Sorcím |
Sara | Sorcím |
Bölcs | sorcím |
Megjegyzés , itt az indexben minden sorban van egy oszlop, amely tárolja annak a sornak a címét, amelyhez a név tartozik. Tehát ha egy lekérdezést adnak ki a “Jon” nevű hallgató nemének és DOB-jának lekérdezésére, akkor az adatbázis először az “Jon” nevet keresi az indexen belül. Ezután elolvassa a “Jon” sorcímét, és közvetlenül a “hallgató” táblázatban arra a sorra kerül, hogy lekérje Jon nemét és DOB-ját.
Következtetés
A beszélgetésből a fürtözött és a nem fürtözött indexek között a következő különbségeket találjuk.
- Táblázatonként csak egy fürtözött index lehet. Ugyanakkor több nem fürtözött indexet is létrehozhat egyetlen táblán.
- A fürtözött indexek csak táblákat rendeznek. Ezért nem fogyasztanak külön tárhelyet. A nem fürtözött indexeket a tényleges táblázattól elkülönített helyen tárolják, és nagyobb tárhelyet igényelnek.
- A fürtözött indexek gyorsabbak, mint a nem fürtözött indexek, mivel nem jelentenek további keresési lépéseket.
Ben nagyszerű cikkei
Különbség az identitás között & Az SQL Server sorrendje
Mi a különbség az SQL Server fürtözött és nem fürtözött indexei között?
- Szerző
- Legfrissebb bejegyzések
Ben Richardson összes üzenetének megtekintése
- Power BI: Vízesésdiagramok és kombinált látványelemek – 2021. január 19.
- Power BI : Feltételes formázás és adatszínek működés közben – 2021. január 14.
- Power BI: Adatok importálása SQL Server és MySQL-ből – 2021. január 12.
573 279 nézet
© 2021 Quest Software Inc. MINDEN JOG FENNTARTVA. | GDPR | Felhasználási feltételek | Adatvédelem