Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
Az index egy táblához vagy nézethez társított lemezen lévő struktúra, amely felgyorsítja a sorok beolvasását a táblázatból vagy nézetből. Az indexek a tábla vagy nézet egy vagy több oszlopából összeállított kulcsokat tartalmaznak. Ezek a kulcsok egy olyan struktúrában (B-fa) vannak tárolva, amely lehetővé teszi, hogy az SQL Server gyorsan és hatékonyan megkeresse a kulcsértékekhez társított sorokat vagy sorokat.
Note
A dokumentáció általában a B-fa kifejezést használja az indexekre hivatkozva. A sorkataszterekben az adatbázismotor egy B+ fát implementál. Ez nem vonatkozik az oszlopcentrikus indexekre vagy a memóriaoptimalizált táblák indexére. További információ: SQL Server és Azure SQL index architektúrája és tervezési útmutatója.
A táblák vagy nézetek az alábbi indextípusokat tartalmazhatják:
Clustered
- A fürtözött indexek a kulcsértékek alapján rendezik és tárolják az adatsorokat a táblában vagy a nézetben. Ezek a kulcsértékek az indexdefiníció oszlopai. Táblánként csak egy fürtözött index lehet, mivel maguk az adatsorok csak egy sorrendben tárolhatók.
- A tábla adatsorainak rendezése csak akkor történik, ha a tábla fürtözött indexet tartalmaz. Ha egy tábla fürtözött indexet tartalmaz, a táblát fürtözött táblának nevezzük. Ha egy tábla nem rendelkezik fürtözött indexel, az adatsorokat egy halomnak nevezett rendezetlen struktúrában tárolja a rendszer.
Nonclustered
A nemclustered indexek struktúrája elkülönül az adatsoroktól. A nemclustered index tartalmazza a nemclustered indexkulcs értékeit, és minden kulcsérték-bejegyzés egy mutatót tartalmaz az adatsorra, amely a kulcsértéket tartalmazza.
A nem rendezett index indexsorából egy adatsorra mutató mutatót sorkeresőnek nevezzük. A sorkereső szerkezete attól függ, hogy az adatoldalak halomban vagy csoportosított táblában vannak-e tárolva. Halom esetén a sorkereső egy sorra mutató jelző. Fürtözött tábla esetén a sorhelymeghatározó a fürtözött indexkulcs.
A nem kulcsos oszlopok hozzáadásával a nem csoportosított index levélszintjéhez megkerülheti a meglévő indexkulcs korlátokat, és teljes lefedettségű lekérdezéseket hajthat végre. További információ: Indexek létrehozása belefoglalt oszlopokkal. Az indexkulcs korlátairól további információt az SQL Server maximális kapacitás-specifikációi című témakörben talál.
A fürtözött és a nem fürtözött indexek is egyediek lehetnek. Egyedi index esetén egyetlen sor sem rendelkezhet ugyanazzal az értékkel az indexkulcshoz. Ellenkező esetben az index nem egyedi, és több sor is ugyanazt a kulcsértéket használhatja. További információ: Egyedi index létrehozása.
A rendszer automatikusan megőrzi az indexeket egy táblához vagy nézethez, amikor a tábla adatai módosulnak.
A speciális célú indexek további típusait az Indexek című témakörben talál.
Indexek és korlátozások
Az SQL Server automatikusan létrehozza az indexeket, amikor PRIMARY KEY a UNIQUE táblaoszlopokon korlátozásokat határoznak meg. Ha például kényszerű UNIQUE táblát hoz létre, az adatbázismotor automatikusan létrehoz egy nemclustered indexet. Ha konfigurál egy adatbázismotort PRIMARY KEY, az adatbázismotor automatikusan létrehoz egy fürtözött indexet, kivéve, ha már létezik fürtözött index. Ha egy meglévő táblára próbál kényszert PRIMARY KEY kényszeríteni, és a táblán már létezik fürtözött index, az SQL Server egy nemclustered index használatával kényszeríti ki az elsődleges kulcsot.
További információ: Elsődleges kulcsok létrehozása és egyedi korlátozások létrehozása.
Az indexek lekérdezésoptimalizáló általi használata
A jól megtervezett indexek csökkenthetik a lemez I/O-műveleteit, és kevesebb rendszererőforrást használhatnak fel. Ezért ezek az indexek javítják a lekérdezési teljesítményt. Az indexek hasznosak lehetnek a különböző lekérdezésekhez, amelyek , , vagy SELECT utasításokat tartalmaznakUPDATE. DELETEMERGE Fontolja meg a lekérdezést SELECT JobTitle, HireDate FROM HumanResources.Employee WHERE BusinessEntityID = 250 az AdventureWorks2025 adatbázisban. A lekérdezés végrehajtásakor a lekérdezésoptimalizáló kiértékeli az adatok lekéréséhez rendelkezésre álló összes módszert, és kiválasztja a leghatékonyabb módszert. A módszer lehet táblavizsgálat, vagy egy vagy több index vizsgálata, ha léteznek.
A táblavizsgálat során a lekérdezésoptimalizáló beolvassa a tábla összes sorát, és kinyeri a lekérdezés feltételeinek megfelelő sorokat. A táblavizsgálat számos lemez I/O-műveletet generál, és erőforrás-igényes lehet. A táblavizsgálat azonban akkor lehet a leghatékonyabb módszer, ha például a lekérdezés eredményhalmaza a tábla sorainak nagy százaléka.
Amikor a lekérdezésoptimalizáló indexet használ, megkeresi az indexkulcs oszlopait, megkeresi a lekérdezéshez szükséges sorok tárolási helyét, és kinyeri a megfelelő sorokat ebből a helyről. Az indexek keresése általában sokkal gyorsabb, mint a táblában való keresés. A táblázatokkal ellentétben az indexek gyakran nagyon kevés oszlopot tartalmaznak soronként, és a sorok rendezési sorrendben vannak.
A lekérdezésoptimalizáló általában a lekérdezések végrehajtásakor a leghatékonyabb módszert választja ki. Ha azonban nem érhetők el indexek, a lekérdezésoptimalizálónak táblavizsgálatot kell használnia. A feladat az, hogy olyan indexeket tervezzen és hozzon létre, amelyek a legjobban megfelelnek a környezetnek, hogy a lekérdezésoptimalizáló olyan hatékony indexeket válasszon, amelyek közül választhat. Az SQL Server az adatbázismotor hangolási tanácsadóját biztosítja az adatbázis-környezet elemzéséhez és a megfelelő indexek kiválasztásához.
Important
Az indexek tervezési irányelveiről és belső elemeiről az SQL Server és az Azure SQL index architektúrájában és tervezési útmutatójában talál további információt.