2010-08-04 6 views
10

Qualsiasi punto di riferimento, grafico nulla? È tutto accademico e teorico attraverso il web.Qualcuno ha una prova considerevole del fatto che CHAR è più veloce di VARCHAR?

Ok non è la prima volta che questa domanda è stata posta, tutti dicono che l'utilizzo dei risultati CHAR in selezioni più veloci? Leggo persino nei libri di MySQL, è lo stesso, ma non ho incontrato alcun benchmark che dimostri questo.

Qualcuno può far luce su questo?

+0

Non è, a meno che non si è fissato stringhe di lunghezza, quindi char è più veloce. –

+0

No aspetta, quindi per sua natura CHAR non può avere lunghezza puntura variabile, come il resto è una parte della stringa soltanto che il suo spazio solo bianco, non penso la "a meno che" parte si applicherebbe qui come già fissato. - –

risposta

5

Questa è la logica semplice, per semplificare mi prendo l'esempio di un file CSV ...

sarebbe più veloce per la ricerca in questa linea

1231; 231; 32345; 21312; 23.435.552 ; 1231; 1; 243; 211; 3.525.321; 44.343.112;

o questa

12; 23; 43; 54; 56; 76; 54; 83; 45; 91; 28; 92

finchè si definisce la lunghezza corretta CHAR dovrebbe essere più veloce in quanto il formato predefinito aiuta il tempo di elaborazione.

+0

Quindi, se quello che stai dicendo è vero, non v'è alcun aumento reale della velocità nell'utilizzo CHAR a meno che, per esempio, un "fullname CHAR (20)" colonna ha tutti i nomi completi esattamente riempite con i dati relativi a 20 caratteri. Destra? o ciò avviene automaticamente perché lo spazio morto viene aggiunto come traccia su queste colonne? –

+0

Lo spazio è aggiunto, quindi è sempre esattamente 20. Ecco perché è più veloce. –

+1

Si noti che questo si applica solo se TUTTI i campi nella riga sono a larghezza fissa. – Mchl

0

Immagino che dovresti prendere il guanto e farlo.

4

Il punto è, non lo è. Comunque da solo.

Ciò che è vero tuttavia, è che se ci sono solo campi di larghezza fissa nella tabella, MySQL non ha bisogno di eseguire alcuni calcoli per scoprire l'inizio di ogni campo.

Inoltre potrebbe esserci una differenza per campi molto brevi. Se si confrontano CHAR (1) vs VARCHAR (1), quest'ultimo prende il doppio della memoria come il primo (in codifiche a singolo byte)