2010-01-31 8 views
12

Quanto di differenza utilizza tinyint o smallint (se applicabile) anziché solo int? O limitando un campo char ai caratteri minimi necessari?Quanto è importante selezionare il tipo di dati più piccolo possibile durante la progettazione di un database?

Queste scelte influenzano le prestazioni o solo lo spazio allocato?

+1

Qual è il tuo targe t piattaforma? Quanti dischi hai intenzione di memorizzare? Informazioni come questa incluse nella domanda possono aiutare a guidare una risposta appropriata. –

+0

Non ho un bisogno specifico (ancora, potrebbe avere presto) voglio solo imparare –

risposta

7

In un campo indicizzato con una tabella notevolmente grande, le dimensioni del campo possono influire notevolmente sulle prestazioni. Su un campo non indeterminato il suo bit non altrettanto importante deve ancora scrivere i dati extra.

Detto questo, il tempo di inattività di un ridimensionamento di un tavolo di grandi dimensioni può essere di diversi minuti o anche di alcune ore, quindi non renderli più piccoli di quanto si possa immaginare.

5

Sì, influisce anche sulle prestazioni.

Se gli indici sono più grandi, è necessario più tempo per leggerli dal disco e meno può essere memorizzato nella cache.

0

Entrambi, in alcuni casi. Ma imo, è più una questione di design che di prestazioni e considerazioni sullo storage. Il motivo per cui non si crea tutto varchar(...) è perché questo non riflette in modo preciso il tipo di dati che devono essere memorizzati lì e riduce l'integrità dei dati e la sicurezza del tipo.

2

ho spesso visto questi tre difetti di progettazione dello schema causando problemi:

  1. A varchar (n) campo è stato creato con n solo abbastanza grande per il campione di dati che il progettista aveva tirato in, non il popolazione globale: bene nei test unitari, troncamenti silenziosi nel mondo reale.
  2. Un varchar (n) utilizzato dove i dati sono dimensioni fisse. Questo maschera i bug dei dati.
  3. Un carattere (n) utilizzato per dati di lunghezza variabile. Ciò fornisce miglioramenti delle prestazioni (consentendo ai dati di sedersi in fila nella riga sul disco, ma tutto il codice client (e vari proc/viste memorizzati ecc.) Devono affrontare i problemi di spaziatura degli spazi bianchi (e spesso non lo fanno). padding spazio bianco può essere difficile da rintracciare, perché gli spazi non si presentano troppo bene, e varie biblioteche/client SQL sopprimerli.

non ho mai visto un ben intenzionate (vale a dire non solo con varchar (255 per tutti i cols), ma una selezione prudente delle dimensioni dei dati sbagliate causa un significativo problema di prestazioni: per un fattore significativo, intendo il fattore 10. Vedo regolarmente difetti di progettazione algoritmica (mancano indici, invio di troppi dati sul filo ecc. più grandi successi delle prestazioni

+0

varchar (255) dovrebbe essere esattamente efficace come varchar (10) perché la dimensione, è solo una dimensione massima. Mysql usa solo esattamente il numero di byte necessari per archiviare il contenuto. Questo è diverso da un char dove mysql usa esattamente il numero dato di byte. –

Problemi correlati