Megosztás a következőn keresztül:


Indexek létrehozása belefoglalt oszlopokkal

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-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 a NULL é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

  1. 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.

  2. A pluszjel kiválasztásával bontsa ki a Táblák mappát.

  3. Jelölje ki a pluszjelet annak a táblának a kibontásához, amelyen nem kulcsos oszlopokat tartalmazó indexet szeretne létrehozni.

  4. 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.

  5. Az Új index párbeszédpanel Általános lapján adja meg az új index nevét az Index neve mezőben.

  6. Az Indexkulcs oszlopai lapon válassza a Hozzáadás....

  7. 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.

  8. Kattintson az OK gombra.

  9. A Belefoglalt oszlopok lapon válassza a Hozzáadás....

  10. 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.

  11. Kattintson az OK gombra.

  12. Az Új index párbeszédpanelen válassza OKlehetőséget.

Index létrehozása nem kulcsoszlopokkal a Transact-SQL használatával

  1. Az Object Explorer-ben csatlakozzon az adatbázismotor egy példányához.

  2. A Standard sávon válassza Új lekérdezéslehetőséget.

  3. 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