Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

numeric(38,0) come colonna della chiave primaria; buono, cattivo, chi se ne frega?

Bene, tu sei spendendo più dati per memorizzare numeri che non raggiungerai mai davvero.

bigint sale a 9.223.372.036.854.775.807 in 8 byte

int sale a 2.147.483.647 in 4 byte

A NUMERIC(38,0) ci vorrà, se sto facendo bene i calcoli, 17 byte.

Non una grande differenza, ma:tipi di dati più piccoli =più righe in memoria (o meno pagine per lo stesso numero di righe) =meno I/O del disco per eseguire ricerche (indicizzate o ricerche di pagine di dati). Lo stesso vale per la replica, le pagine di registro, ecc.

Per SQL Server:INT è uno standard IEEE e quindi è più facile da confrontare per la CPU, quindi ottieni un leggero aumento delle prestazioni usando INT rispetto a NUMERIC (che è un formato decimale compresso). (Nota in Oracle, se la versione corrente corrisponde alle versioni precedenti su cui sono cresciuto, TUTTI i tipi di dati sono impacchettati, quindi un INT all'interno è praticamente la stessa cosa di un NUMERIC( x,0 ) quindi non c'è differenza di prestazioni)

Quindi, nel grande schema delle cose:se hai molto disco, RAM e I/O di riserva, usa il tipo di dati che desideri. Se vuoi ottenere un po' più di prestazioni, sii un po' più prudente.

Altrimenti a questo punto lo lascerei così com'è. Non c'è bisogno di cambiare le cose.