Du kanske är intresserad av Första programmeringsregeln .
Ett klustrat index inkluderar alltid alla rader. Den kan beställas efter z
, men det kommer fortfarande att innehålla alla andra kolumner på bladnivå.
Anledningen till att SQL Server ibland föredrar en klustrad skanning framför en indexsökning är detta. När du gör en indexsökning måste du följa upp den med en bokmärkessökning till det klustrade indexet för att hämta kolumner som inte finns i indexet.
När du gör en klustrad indexskanning hittar du per definition alla kolumner. Det betyder att ingen bokmärkessökning krävs.
När SQL Server förväntar sig många rader försöker den undvika bokmärkessökningar. Detta är ett beprövat val. Icke-klustrade indexsökningar slås rutinmässigt av klustrade indexskanningar.
Du kan testa detta för ditt fall genom att tvinga antingen med with (index(IX_YourIndex))
frågetips
.