Delen via


Een geclusterde index maken

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

U kunt geclusterde indexen maken op tabellen met behulp van SQL Server Management Studio of Transact-SQL. Met enkele uitzonderingen moet elke tabel een geclusterde index hebben. Naast het verbeteren van de queryprestaties, kan een geclusterde index opnieuw worden opgebouwd of opnieuw worden georganiseerd op aanvraag om de fragmentatie van tabellen te beheren. Een geclusterde index kan ook worden gemaakt in een weergave. (Geclusterde indexen worden gedefinieerd in het artikel Geclusterde en niet-geclusterde indexen.)

Typische implementaties

Geclusterde indexen worden op de volgende manieren geïmplementeerd:

  • PRIMAIRE SLEUTEL en UNIEKE beperkingen

    Wanneer u een PRIMARY KEY beperking maakt, wordt er automatisch een unieke geclusterde index voor de kolom of kolommen gemaakt als er nog geen geclusterde index in de tabel bestaat en u geen unieke niet-geclusterde index opgeeft. De primaire-sleutelkolom kan geen NULL waarden toestaan.

    Wanneer u een UNIQUE beperking maakt, wordt er een unieke niet-geclusterde index gemaakt om standaard een UNIQUE beperking af te dwingen. U kunt een unieke geclusterde index opgeven als er nog geen geclusterde index in de tabel bestaat.

    Een index die als onderdeel van de beperking is gemaakt, krijgt automatisch dezelfde naam als de naam van de beperking. Zie beperkingen voor primaire en refererende sleutels en Unieke beperkingen en controleer de beperkingenvoor meer informatie.

  • Index onafhankelijk van een beperking

    U kunt een geclusterde index maken op een andere kolom dan de primaire-sleutelkolom als er een beperking voor een niet-geclusterde primaire sleutel is opgegeven.

Beperkingen

  • Wanneer een geclusterde indexstructuur wordt gemaakt, is schijfruimte voor zowel de oude (bron) als de nieuwe (doel) structuren vereist in hun respectieve bestanden en bestandsgroepen. De oude structuur wordt pas toegewezen als de volledige transactiedoorvoeringen zijn voltooid. Er is mogelijk ook extra tijdelijke schijfruimte vereist voor het sorteren. Zie Schijfruimtevereisten voor DDL-indexbewerkingenvoor meer informatie.

  • Als een geclusterde index wordt gemaakt op een heap met verschillende bestaande niet-geclusterde indexen, moeten alle niet-geclusterde indexen opnieuw worden opgebouwd, zodat ze de clusteringsleutelwaarde bevatten in plaats van de rij-id (RID). Als een geclusterde index wordt verwijderd in een tabel met meerdere niet-geclusterde indexen, worden de niet-geclusterde indexen allemaal opnieuw opgebouwd als onderdeel van de DROP-bewerking. Dit proces kan veel tijd in beslag nemen voor grote tabellen.

    De voorkeursmethode voor het bouwen van indexen voor grote tabellen is om te beginnen met de geclusterde index en vervolgens eventuele niet-geclusterde indexen te bouwen. U kunt de optie ONLINE instellen op AAN wanneer u indexen voor bestaande tabellen maakt. Wanneer deze is ingesteld op AAN, worden langdurige tabelvergrendelingen niet vastgehouden. Hierdoor kunnen queries of updates van de onderliggende tabel doorgaan. Zie Indexbewerkingen online uitvoerenvoor meer informatie.

  • De indexsleutel van een geclusterde index kan geen varchar- kolommen bevatten die bestaande gegevens bevatten in de ROW_OVERFLOW_DATA toewijzingseenheid. Als er een geclusterde index wordt gemaakt op een varchar- kolom en de bestaande gegevens zich in de IN_ROW_DATA toewijzingseenheid bevinden, mislukken volgende invoeg- of bijwerkacties in de kolom die de gegevens buiten de rij pushen. Gebruik de sys.dm_db_index_physical_stats (Transact-SQL) dynamische beheerfunctie om informatie te verkrijgen over tabellen die rij-overloopgegevens kunnen bevatten.

Machtigingen

Hiervoor is ALTER machtiging voor de tabel of weergave vereist. De gebruiker moet lid zijn van de sysadmin vaste serverfunctie of de db_ddladmin en db_owner vaste databaserollen.

SQL Server Management Studio gebruiken

Een geclusterde index maken vanuit Objectverkenner

  1. Vouw in Objectverkenner de tabel uit waarop u een geclusterde index wilt maken.

  2. Klik met de rechtermuisknop op de map Indexen, wijs Nieuwe Indexaan en selecteer Geclusterde Index....

  3. Voer in het dialoogvenster Nieuwe index op de pagina Algemeen de naam van de nieuwe index in het vak Indexnaam.

  4. Onder indexsleutelkolommen, selecteer Toevoegen....

  5. Schakel in het dialoogvenster Kolommen selecteren intable_name het selectievakje van de tabelkolom in die moet worden toegevoegd aan de geclusterde index.

  6. Selecteer OK-.

  7. Selecteer in het dialoogvenster Nieuwe indexOK-.

Een geclusterde index maken met de ontwerpfunctie voor tabellen

  1. Vouw in Objectverkenner de database uit waarop u een tabel wilt maken met een geclusterde index.

  2. Klik met de rechtermuisknop op de map Tabellen en selecteer Nieuwe tabel....

  3. Maak een nieuwe tabel zoals u dat normaal zou doen. Zie Tabellen maken (Database Engine)voor meer informatie.

  4. Klik met de rechtermuisknop op de nieuwe tabel die u eerder hebt gemaakt en selecteer Ontwerp.

  5. Selecteer Indexen/Sleutels in het menu Tabelontwerper.

  6. Selecteer in het dialoogvenster Indexen/sleutelsToevoegen.

  7. Selecteer de nieuwe index in het tekstvak Geselecteerde primaire/unieke sleutel of index.

  8. Selecteer in het raster Maken als geclusterd objecten kies Ja in de vervolgkeuzelijst rechts van de eigenschap.

  9. Selecteer en sluit.

  10. Selecteer in het menu BestandOpslaantable_name.

Gebruik Transact-SQL

  1. Maak in Objectverkennerverbinding met een exemplaar van de Database-Engine.

  2. Selecteer op de standaardbalk Nieuwe query.

  3. Kopieer en plak het volgende voorbeeld in het queryvenster en selecteer uitvoeren.

    USE AdventureWorks2022;
    GO
    
    -- Create a new table with three columns.
    CREATE TABLE dbo.TestTable (
        TestCol1 INT NOT NULL,
        TestCol2 NCHAR(10) NULL,
        TestCol3 NVARCHAR(50) NULL
    );
    GO
    
    -- Create a clustered index called IX_TestTable_TestCol1
    -- on the dbo.TestTable table using the TestCol1 column.
    CREATE CLUSTERED INDEX IX_TestTable_TestCol1 ON dbo.TestTable (TestCol1);
    GO
    

Zie CREATE INDEX (Transact-SQL)voor meer informatie.