2011-01-12 13 views
15

Considerando ciò che gli stati MSDN riguardano l'archiviazione di SQL Server 2008 R2 di precisione NUMERIC/DECIMAL.SQL Server NUMERIC/DECIMAL precisione rispetto all'archiviazione

precisione da 1 a 9 è 5 byte
precisione di 10 a 19 è 9 byte

Quindi, se il mio caso aziendale richiede logicamente un tipo di dati con 2 posti decimali e una precisione di 5 cifre non esegue alcuna differenza di prestazioni o memorizzazione effettiva se lo definisco come NUMERIC (5, 2) o NUMERIC (9, 2).

Una considerazione che sto ignorando intenzionalmente è il vincolo di controllo implicito poiché molto probabilmente metto un vincolo di controllo effettivo sulla colonna che limita l'intervallo consentito.

Questo fa la differenza quando si tratta di indici, prestazioni di query o altri aspetti del sistema?

+0

NUMERIC non garantisce la presenza di una posizione decimale nel valore inserito/aggiornato. –

+0

Test per overflow utilizzando sum(). –

risposta

37

Numerico (5, 2) consente numeri fino a 999,99 incluso. Se si tenta di inserire 1000.0 in questo, si otterrà un overflow aritmetico.

numerico (9,2) permette numeri fino al 9 999 999,99

Tenete a mente che se avete intenzione di sommare mai questo valore, lasciare spazio in più, altrimenti si otterrà un overflow o un te' Dovrò fare un cast esplicito.

Occupano lo stesso numero di byte. Poiché hanno la stessa dimensione di archiviazione, sono uguali nella pagina dati, nella memoria, negli indici, nella trasmissione di rete, ecc.

È per questo motivo che di solito calcolo il numero di dimensioni di cui ho bisogno memorizzare (se si utilizza un valore numerico), quindi aumentare la precisione (e forse la scala) in modo tale che io sia appena sotto il punto in cui aumenta la dimensione della memoria. Quindi, se ho bisogno di memorizzare fino a 99 milioni con 4 cifre decimali, sarebbe numerico (12,4). Per la stessa archiviazione, posso avere un numero (19,6) e dare un po 'di spazio sicuro per quando l'utente aziendale annuncia che ha davvero bisogno di archiviare un paio di miliardi.

Problemi correlati