varchar (255) vs tinytext / tinyblob e varchar (65535) vs blob / text


91

Per definizione:

VARCHAR: l'intervallo di lunghezza è compreso tra 1 e 255 caratteri. I valori VARCHAR vengono ordinati e confrontati in modo senza distinzione tra maiuscole e minuscole a meno che non venga fornita la parola chiave BINARY. x + 1 byte
TINYBLOB, TINYTEXT: una colonna BLOB o TEXT con una lunghezza massima di 255 (2 ^ 8 - 1) caratteri x + 1 byte

Quindi sulla base di questo, creo la seguente tabella:

CREATE TABLE `user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255),
  `lastname` tinytext,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

O è meglio creare un varchar o un tinytext e perché ?

È lo stesso per:

VARCHAR: l'intervallo di lunghezza è> 255 caratteri. I valori VARCHAR vengono ordinati e confrontati senza distinzione tra maiuscole e minuscole a meno che non venga fornita la parola chiave BINARY. x + 2 byte
BLOB, TEXT A BLOB o colonna TEXT con una lunghezza massima di 65535 (2 ^ 16 - 1) caratteri x + 2 byte


VARCHAR richiede meno overhead di memoria, ma di solito verranno letti completamente in memoria, quindi alla fine VARCHAR potrebbe ancora utilizzare più memoria. Sono entrambi diversi. Si utilizza BLOB per memorizzare dati binari come un'immagine, audio e altri dati multimediali. e VARCHAR per memorizzare testo di qualsiasi dimensione fino al limite.
Libro di Zeus

Risposte:


10

In questo caso varcharè meglio.

Nota che varcharpuò essere compreso tra 1 e 65535 caratteri.

I valori nelle colonne VARCHAR sono stringhe di lunghezza variabile. La lunghezza può essere specificata come un valore da 0 a 255 prima di MySQL 5.0.3 e da 0 a 65.535 in 5.0.3 e versioni successive. La lunghezza massima effettiva di un VARCHAR in MySQL 5.0.3 e versioni successive è soggetta alla dimensione massima delle righe (65.535 byte, condivisa tra tutte le colonne) e al set di caratteri utilizzato. Vedere la Sezione E.7.4, "Conteggio colonne della tabella e limiti delle dimensioni delle righe".

I BLOB vengono salvati in una sezione separata del file.
Richiedono un fileread extra da includere nei dati.
Per questo motivo varchar viene recuperato molto più velocemente.

Se si dispone di un BLOB di grandi dimensioni a cui si accede di rado, ha più senso un BLOB.
L'archiviazione dei dati BLOB in un file separato (parte del) consente di ridurre le dimensioni del file di dati di base e quindi di recuperarlo più rapidamente.


Se questo è meglio o meno dipende dai modelli di accesso ai dati.
Michael Mior

1
Quale file separato potrebbe essere?
glglgl

1
I BLOB non vengono salvati in un file separato. Ma sono archiviati in una posizione fisica separata dal resto delle colonne.
Michael Mior

1
Si noti che ciò non dipende solo dalla frequenza di accesso, ma anche dalle operazioni che vengono eseguite sui dati. Ad esempio, qualsiasi query che richiede una scansione della tabella (che in genere è comunque errata), ma non la colonna di testo, sarà peggiorata dal volume maggiore di dati scansionati.
Michael Mior

1
Sospetto anche che i file sort che non utilizzano questa colonna potrebbero essere più efficienti se i dati vengono archiviati fuori pagina, anche se non sono sicuro che l'ottimizzatore di query sia abbastanza intelligente da non estrarre questi dati.
Michael Mior
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.