Domanda

Come fa MySQL memorizza un campo varchar? Posso presumere che il seguente schema rappresenta formati di archiviazione ragionevoli:

1,2,4,8,16,32,64,128,255 (max)

Un chiarimento via esempio. Diciamo che ho un campo varchar di 20 caratteri. Fa MySQL durante la creazione di questo campo, in fondo riservare spazio per 32 byte (non è sicuro se sono byte o meno), ma consentono solo 20 da inserire?

Credo che io sono preoccupato per ottimizzare lo spazio su disco per un tavolo enorme.

È stato utile?

Soluzione

Per rispondere alla domanda, su disco MySQL utilizza 1 + la dimensione che viene utilizzato nel campo per memorizzare i dati (quindi se la colonna è stata dichiarata varchar (45), e il campo è stato "FooBar" sarebbe utilizzare 7 byte su disco, a meno che naturalmente dove utilizzando un set di caratteri multibyte, dove sarebbe utilizzando 14 byte). Così, invece di dichiarare le colonne, non ci vorrà fare la differenza alla fine di memorizzazione (lei ha dichiarato siete preoccupati per l'ottimizzazione del disco per un tavolo di massa). Tuttavia, lo fa fare la differenza nelle query, come VARCHAR di vengono convertiti a char, quando MySql rende una tabella temporanea (SORT, ORDINE, ecc) e le più record che si possono inserire in una singola pagina, il meno memoria e più velocemente le scansioni tavolo sarà essere.

Altri suggerimenti

MySQL memorizza un campo varchar come un record di lunghezza variabile, sia con un unico byte o un prefisso di due byte per indicare la dimensione di record.

Avere un modello di formati di archiviazione in realtà non fa alcuna differenza per quanto MySQL funzionerà quando si tratta di memorizzazione record di lunghezza variabile. La lunghezza specificata in (x) dichiarazione varchar semplicemente determinare la lunghezza massima dei dati che possono essere memorizzati. Fondamentalmente, un varchar (16) non è diverso disco-saggio di un varchar (128).

Questa pagina di manuale ha una spiegazione più dettagliata.

Modifica: Per quanto riguarda la tua domanda aggiornato, la risposta è sempre la stessa. Un campo varchar utilizza solo lo stesso spazio su disco come dati memorizzati in esso (più un sovraccarico di uno o due byte). Quindi non importa se si dispone di un varchar (16) o un varchar (128), se si memorizza una stringa di 10 caratteri in esso, si sta solo andando a utilizzare 10 byte (più 1 o 2) di spazio su disco .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top