- 02/11/2019
- 4 minuter att läsa
-
- M
- M
- C
- M
- r
-
+9
Gäller för: SQL Server (alla versioner som stöds) Azure SQL Database
Ett index är en diskstruktur som är associerad med en tabell eller vy som snabbar hämtningen av rader från tabellen eller vyn. Ett index innehåller nycklar byggda från en eller flera kolumner i tabellen eller vyn. Dessa nycklar lagras i en struktur (B-träd) som gör det möjligt för SQL Server att hitta raden eller raderna som är associerade med nyckelvärdena snabbt och effektivt.
En tabell eller vy kan innehålla följande typer av index:
-
Clustered
- Clustered index sorterar och lagrar dataraderna i tabellen eller vyn baserat på deras nyckelvärden. Det här är de kolumner som ingår i indexdefinitionen. Det kan bara finnas ett klustrat index per tabell, eftersom själva dataraderna kan lagras i endast en ordning.
- Den enda gången dataraderna i en tabell lagras i sorterad ordning är när tabellen innehåller ett grupperat index. När en tabell har ett klusterindex kallas tabellen för en grupperad tabell. Om en tabell inte har något klusterindex lagras dess datarader i en oordnad struktur som kallas en heap.
-
Icke-grupperad
-
Oklusterade index har en struktur som är skild från datorraderna. Ett icke-klusterat index innehåller de icke-klasserade indexnyckelvärdena och varje nyckelvärdepost har en pekare till datorraden som innehåller nyckelvärdet.
-
Pekaren från en indexrad i en icke-kluster index till en datarad kallas en radlokaliserare. Strukturen för radlokatorn beror på om datasidorna lagras i en hög eller en grupperad tabell. För en hög är en radlokaliserare en pekare till raden. För en grupperad tabell är radlokatorn den grupperade indexnyckeln.
-
Du kan lägga till icke-nyckelkolumner till bladnivån i det icke-klusterade indexet för att kringgå befintliga indexnyckelgränser, och utföra helt täckta, indexerade frågor. Mer information finns i Skapa index med inkluderade kolumner. Mer information om indexnyckelgränser finns i Maximum Capacity Specifications for SQL Server.
-
Både klustrade och icke-klusterade index kan vara unika. Detta innebär att inga två rader kan ha samma värde för indexnyckeln. Annars är indexet inte unikt och flera rader kan dela samma nyckelvärde. Mer information finns i Skapa unika index.
Index underhålls automatiskt för en tabell eller vy när tabelldata ändras.
Se index för ytterligare typer av specialindex.
Index och begränsningar
Index skapas automatiskt när PRIMÄRA NYCKEL- och UNIKA begränsningar definieras i tabellkolumner. När du till exempel skapar en tabell med en UNIK begränsning skapar databasmotorn automatiskt ett icke-klusterat index. Om du konfigurerar en PRIMÄR NYCKEL skapar databasmotorn automatiskt ett klusterindex, såvida det inte redan finns ett klusterindex. När du försöker tillämpa en PRIMÄR KEY-begränsning på en befintlig tabell och ett klusterindex redan finns i den tabellen, tvingar SQL Server den primära nyckeln med ett icke-klusterat index.
Mer information finns i Skapa primära nycklar och Skapa unika begränsningar.
Hur index används av Query Optimizer
Välutformade index kan minska disk-I / O-operationer och konsumera färre systemresurser, vilket förbättrar frågan. Index kan vara till hjälp för olika frågor som innehåller SELECT-, UPDATE-, DELETE- eller MERGE-uttalanden. Tänk på frågan SELECT Title, HireDate FROM HumanResources.Employee WHERE EmployeeID = 250
i AdventureWorks2012-databasen. När den här frågan körs utvärderar frågan optimeraren varje tillgänglig metod för att hämta data och väljer den mest effektiva metoden. Metoden kan vara en tabellsökning eller kan skanna ett eller flera index om de finns.
När du utför en tabellsökning läser frågeoptimeraren alla raderna i tabellen och extraherar raderna som möter sökfrågan. En tabellsökning genererar många disk-I / O-operationer och kan vara resurskrävande. En tabellsökning kan dock vara den mest effektiva metoden om till exempel resultatuppsättningen för frågan är en hög procentsats av rader från tabellen.
När sökoptimeringsverktyget använder ett index, söker det efter indexera nyckelkolumner, hittar lagringsplatsen för de rader som behövs av frågan och extraherar matchande rader från den platsen. I allmänhet är sökning i index mycket snabbare än att söka i tabellen, till skillnad från en tabell innehåller ett index ofta mycket få kolumner per rad och raderna är i sorterad ordning.
Frågaoptimeraren väljer vanligtvis den mest effektiva metoden vid körning av frågor. Men om inga index är tillgängliga måste frågan optimera använda en tabell genomsökning. Din uppgift är att designa och skapa index som passar bäst i din miljö så att frågoptimiseraren har ett urval av effektiva index att välja mellan. SQL Server tillhandahåller Database Engine Tuning Advisor för att hjälpa till med analysen av din databasmiljö och vid val av lämpliga index.
Viktigt
För mer information om riktlinjer för indexdesign och internt, se SQL Server Index Design Guide.
- SQL Server Index Design Guide
- Skapa klustrade index
- Skapa icke-kluster Index