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
Ez a cikk bemutatja, hogyan adhat hozzá beépített (vagy nem kulcs nélküli) oszlopokat a nemclustered indexek funkciójának az SQL Server Management Studio vagy a Transact-SQL használatával történő kibővítéséhez. A nem kulcsos oszlopok beleszámításával létrehozhat nemclustered indexeket, amelyek több lekérdezést fednek le. Ennek az az oka, hogy a nem kulcsos oszlopok a következő előnyökkel járnak:
- Lehetnek olyan adattípusok, amelyek nem engedélyezettek indexkulcsoszlopként.
- Az adatbázismotor nem veszi figyelembe őket az indexkulcs oszlopainak vagy az indexkulcs méretének kiszámításakor.
A nem kulcsoszlopokkal rendelkező indexek jelentősen javíthatják a lekérdezés teljesítményét, ha a lekérdezés összes oszlopa kulcsként vagy nem kulcsoszlopként szerepel az indexben. A teljesítménynövekedés azért érhető el, mert a lekérdezésoptimalizáló az összes oszlopértéket megtalálja az indexen belül; a tábla- vagy fürtözött indexadatok nem érhetők el, ami kevesebb lemez I/O-műveletet eredményez.
Note
Ha egy index tartalmazza a lekérdezés által hivatkozott összes oszlopot, általában a lekérdezést lefedőnek nevezzük.
Tervezési javaslatok
A nagy indexkulcsméretű nemclustered indexeket úgy kell átalakítani, hogy csak a kereséshez és lekérdezésekhez használt oszlopok legyenek kulcsoszlopok. A lekérdezést lefedő összes többi oszlopot ne kulcsoszlopokká alakítsa. Ily módon a lekérdezés lefedéséhez minden oszlop szükséges, de maga az indexkulcs kicsi és hatékony.
Vegye fel a nem kulcsoszlopokat egy nemclustered indexbe, hogy ne lépje túl a legfeljebb 32 kulcsoszlopra vonatkozó jelenlegi indexméret-korlátozást, és az indexkulcs maximális mérete 1700 bájt (16 kulcsoszlop és 900 bájt az SQL Server 2016 előtt (13.x)). Az adatbázismotor nem veszi figyelembe a nem kulcsoszlopokat az indexkulcs oszlopainak vagy az indexkulcs méretének kiszámításakor.
Az indexdefiníció nem kulcsoszlopainak sorrendje nem befolyásolja az indexet használó lekérdezések teljesítményét.
Kerülje a nagyon széles, nem klaszterezett indexeket, ahol a belefoglalt oszlopok nem képviselik elég szűk részhalmazát a mögöttes táblaoszlopoknak. Ha széles indexeket ad hozzá, mindig ellenőrizze, hogy egy extra széles index frissítésének költsége ellensúlyozza-e közvetlenül a táblázatból való olvasás költségét.
Korlátozások
A nem kulcs oszlopok csak nem csoportosított indexeken definiálhatók.
A szöveges, és kép kivételével minden adattípus használható nem kulcsoszlopként.
A determinisztikus és pontos vagy pontatlan számított oszlopok nem kulcsoszlopok lehetnek. A számított oszlopok indexeiről további információkért lásd a éshivatkozást.
A képből, szövegesés szöveges adattípusokból származó számított oszlopok nem kulcsoszlopok lehetnek, feltéve, hogy a számított oszlop adattípusa nem kulcsalapú indexoszlopként engedélyezett.
Nem kulcsos oszlopok csak akkor távolíthatók el egy táblából, ha először a tábla indexe el lett távolítva.
A nem kulcsos oszlopok nem módosíthatók, kivéve a következőket:
Változtassa meg az oszlop nullozhatóságát a
NOT NULLértékről aNULLértékre.Növelje a varchar, nvarcharvagy varbináris oszlopok hosszát.
Biztonság
Permissions
A táblához vagy nézethez ALTER engedély szükséges. A felhasználónak tagja kell lennie a sysadmin rögzített kiszolgálói szerepkörnek, illetve a db_ddladmin és db_owner rögzített adatbázis-szerepköröknek.
Index létrehozása nem kulcsoszlopokkal az SQL Server Management Studióval
Az Objektumkezelőben válassza ki a pluszjelet annak az adatbázisnak a kibontásához, amely azt a táblát tartalmazza, amelyen nem kulcsoszlopokat tartalmazó indexet szeretne létrehozni.
A pluszjel kiválasztásával bontsa ki a Táblák mappát.
Jelölje ki a pluszjelet annak a táblának a kibontásához, amelyen nem kulcsos oszlopokat tartalmazó indexet szeretne létrehozni.
Kattintson a jobb gombbal az Indexek mappára, mutasson az Új indexelemre, majd válassza ki a Nem Fürtözött Index...lehetőséget.
Az Új index párbeszédpanel Általános lapján adja meg az új index nevét az Index neve mezőben.
Az Indexkulcs oszlopai lapon válassza a Hozzáadás....
Az Oszlopok kijelölésetable_name párbeszédpanelen jelölje be az indexhez hozzáadni kívánt táblázatoszlop vagy oszlopok jelölőnégyzetét vagy jelölőnégyzeteit.
Kattintson az OK gombra.
A Belefoglalt oszlopok lapon válassza a Hozzáadás....
Az Oszlopok kijelölésetable_name párbeszédpanelen jelölje be az indexhez nem kulcselemként hozzáadni kívánt táblázatoszlop vagy oszlopok jelölőnégyzetét vagy a jelölőnégyzeteit.
Kattintson az OK gombra.
Az Új index párbeszédpanelen válassza OKlehetőséget.
Index létrehozása nem kulcsoszlopokkal a Transact-SQL használatával
Az Object Explorer-ben csatlakozzon az adatbázismotor egy példányához.
A Standard sávon válassza Új lekérdezéslehetőséget.
Másolja és illessze be a következő példát a lekérdezési ablakba, és válassza a Végrehajtáslehetőséget.
USE AdventureWorks2022; GO -- Creates a nonclustered index on the Person.Address table with four included (nonkey) columns. -- index key column is PostalCode and the nonkey columns are -- AddressLine1, AddressLine2, City, and StateProvinceID. CREATE NONCLUSTERED INDEX IX_Address_PostalCode ON Person.Address (PostalCode) INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID); GO