Ho una tabella con 490 M righe e 55 GB di spazio tabella, quindi circa 167 byte per riga. La tabella ha tre colonne: a VARCHAR(100)
, a DATETIME2(0)
e a SMALLINT
. La lunghezza media del testo nel VARCHAR
campo è di circa 21,5, quindi i dati non elaborati dovrebbero essere di circa 32 byte per riga: 22 + 2 per il VARCHAR
, 6 per il DATETIME2
e 2 per il numero intero a 16 bit.
Si noti che lo spazio sopra è solo dati, non indici. Sto usando il valore riportato in Proprietà | Conservazione | Generale | Spazio dati.
Ovviamente ci deve essere un certo sovraccarico, ma 135 byte per riga sembrano molti, specialmente per una tabella di grandi dimensioni. Perché potrebbe essere? Qualcun altro ha visto moltiplicatori simili? Quali fattori possono influenzare la quantità di spazio aggiuntivo richiesto?
Per confronto, ho provato a creare una tabella con due INT
campi e 1 M righe. Lo spazio dati richiesto era 16,4 MB: 17 byte per riga, rispetto a 8 byte di dati non elaborati. Un'altra tabella di test con an INT
e aVARCHAR(100)
popolato con lo stesso testo della tabella reale utilizza 39 byte per riga (44 K righe), dove mi aspetterei 28 più un po '.
Quindi la tabella di produzione ha un considerevole sovraccarico. È perché è più grande? Mi aspetto che le dimensioni dell'indice siano all'incirca N * log (N), ma non vedo perché lo spazio richiesto per i dati effettivi sia non lineare.
Grazie in anticipo per eventuali suggerimenti!
MODIFICARE:
Tutti i campi elencati sono NOT NULL
. La tabella reale ha un PK cluster sul VARCHAR
campo e sul DATETIME2
campo, in quell'ordine. Per i due test, il primo INT
era il PK (raggruppato).
Se è importante: la tabella è una registrazione dei risultati del ping. I campi sono URL, data / ora del ping e latenza in millisecondi. I dati vengono costantemente aggiunti e mai aggiornati, ma i dati vengono eliminati periodicamente per ridurli a pochi record all'ora per URL.
MODIFICARE:
Una risposta molto interessante qui suggerisce che, per un indice con molta lettura e scrittura, la ricostruzione potrebbe non essere utile. Nel mio caso, lo spazio consumato è un problema, ma se le prestazioni di scrittura sono più importanti, si potrebbe essere meglio con indici flaccidi.