sql >> Databasteknik >  >> RDS >> Sqlserver

Varför och när ska jag använda SPARSE COLUMN? (SQL SERVER 2008)

En gles kolumn använder inte 4x så mycket utrymme för att lagra ett värde använder det en (fast) 4 extra byte per icke-nollvärde. (Som du redan har sagt tar en NULL 0 mellanslag.)

  • Så ett icke-nullvärde lagrat i en bit kolumnen skulle vara 1 bit + 4 byte =4,125 byte. Men om 99 % av dessa är NULL är det fortfarande en nettobesparing.

  • Ett icke-nullvärde lagrat i en GUID (UniqueIdentifier) kolumnen är 16 byte + 4 byte =20 byte. Så om bara 50 % av dessa är NULL, är det fortfarande en nettobesparing.

Så de "förväntade besparingarna" beror starkt på vilken slag kolumn vi pratar om, och din uppskattning av vilket förhållande som kommer att vara noll vs icke-null. Kolumner med variabel bredd (varchars) är förmodligen lite svårare att förutsäga exakt.

Denna Books Online-sida har en tabell som visar vilken procentandel av olika datatyper skulle behöva vara null för att du ska få en förmån.

när ska du använda en Sparse Column? När du förväntar dig att en betydande andel av raderna ska ha ett NULL-värde. Några exempel som kommer att tänka på:

  • Ett "Returdatum för beställning " i en beställningstabell. Du skulle hoppas att en mycket liten procent av försäljningen skulle resultera i returnerade produkter.
  • En "4:e adress " rad i en adresstabell. De flesta postadresser, även om du behöver ett avdelningsnamn och en "Care Of" behöver förmodligen inte fyra separata rader.
  • Ett "Suffix " kolumn i en kundtabell. En ganska låg procent av personerna har en "Jr." eller "III" eller "Esquire" efter sitt namn.


  1. Hur kan jag ändra min standarddatabas i SQL Server utan att använda MS SQL Server Management Studio?

  2. Kommer ANSI JOIN jämfört med icke-ANSI JOIN-frågor att fungera annorlunda?

  3. Infoga alla värden i en tabell i en annan tabell i SQL

  4. Hur gör man synkronisering med lokal databas och pars?