Mysql
 sql >> Database >  >> RDS >> Mysql

È più efficiente separare i dati correlati grandi e piccoli nella colonna di una tabella SQL?

VARCHAR viene memorizzato in linea con la tabella. VARCHAR è più veloce quando la dimensione è ragionevole, il cui compromesso sarebbe più veloce dipende dai tuoi dati e dal tuo hardware, vorresti confrontare uno scenario reale con i tuoi dati.

Il numero massimo effettivo di byte che possono essere archiviati in un VARCHAR o VARBINARY la colonna è soggetta alla dimensione massima della riga di 65,535 bytes , che è condiviso tra tutte le colonne.

Ad esempio, un VARCHAR(255) colonna può contenere una stringa con una lunghezza massima di 255 caratteri. Supponendo che la colonna utilizzi il set di caratteri latin1 (un byte per carattere), la memoria effettiva richiesta è la lunghezza della stringa (L), più un byte per registrare la lunghezza della stringa. Per la stringa 'abcd' , L è 4 e il requisito di archiviazione è di cinque byte. Se invece viene dichiarata la stessa colonna, utilizzare ucs2 set di caratteri a doppio byte, il requisito di archiviazione è 10 byte:la lunghezza di 'abcd' è otto byte e la colonna richiede due byte per memorizzare le lunghezze perché la lunghezza massima è maggiore di 255 (fino a 510 bytes ).

Per dati più grandi, considera l'utilizzo di TEXT o BLOB . TEXT e BLOB le colonne sono implementate in modo diverso in NDB motore di archiviazione, in cui ogni riga in un TEXT colonna è composta da due parti separate. Uno di questi è di dimensione fissa (256 bytes) , ed è effettivamente archiviato nella tabella originale. L'altro è costituito da tutti i dati superiori a 256 bytes , che è archiviato in una tabella nascosta. Le righe in questa seconda tabella sono sempre 2,000 bytes lungo. Ciò significa che la dimensione di un TEXT la colonna è 256 se size <= 256 (dove size rappresenta la dimensione della riga); in caso contrario, la taglia è 256 + size + (2000 – (size – 256) % 2000) .

http://dev.mysql.com/doc/refman /5.6/en/requisiti-di-archiviazione.html

Dipende dalla tua relazione con il database, se usi raramente quei campi nella query. Ad esempio per ulteriori informazioni. Crea una tabella separata è una buona opzione (normalizza).

NOTE : VARCHAR è diverso con CHAR . Se crei VARCHAR(250) e inserisci solo 20 caratteri su di esso, ci vorranno 5 bytes + L diverso con CHAR(250) , ci vorranno 250 bytes + L per la stessa condizione.