2013-03-06 22 views
9

Qual è il migliore per campo indice e token spazio su disco rigido/RAM? Biginteger o Varchar (15)? posso avere, per esempio, quali numero di indice:Mysql Bigint VS Varchar

from 10000001 to 45281229703 and higher... 

ma ciò che è meglio scegliere? Anche nel campo di non indicizzazione quale tipo di campo è migliore?

+1

Una domanda migliore è quale tipo * correttamente * rappresenta il campo .. una volta che si risponde, usarlo. Se non esiste un problema di prestazioni * misurato * (con una configurazione che può anche misurare le prestazioni di alternative), non c'è alcun problema di prestazioni - non "ottimizzare" in questo modo. –

+0

@pst trouble è quel bigint e varchar - entrambi rappresentano il campo normale e quindi, come ho bisogno di – brabertaser19

+0

No. Uno rappresenta un numero. L'altro rappresenta il testo (che potrebbe essere la rappresentazione testuale di un numero). Che è corretto? –

risposta

23

BIGINT è sempre 8 byte, VARCHAR(15) è 1..16 bytes relazione alla durata valore, così BIGINT richiede meno memoria su grandi numnbers, ma più memoria su piccoli numeri (inferiori a 7 cifre). Inoltre, BIGINT è più veloce.

+0

ma come chiave esterna nell'altra tabella? per esempio: id text for_id, che per id i deve fare anche come bigint, giusto? Quindi cosa scegliere?) se ho da 1 a 45281229703 e la riga più alta – brabertaser19

+0

anche senza firma/firmata qui è grande differenza? – brabertaser19

+0

Ricorda inoltre che Varchar richiede una traduzione di codifica ed è quindi ambiguo, un numero non elaborato non presenta questo problema. – 0xCAFEBABE

3

varchar aggiunge sovraccarico:

lunghezza delle esigenze stringa memorizzata (extra 2 byte IIRC in MySQL) per campo e nell'indice richiede più elaborazione per fascicolazione confronto

+0

ma come chiave esterna in un'altra tabella? per esempio: id text for_id, che per id i deve fare anche come bigint, giusto? – brabertaser19

+0

sì che anche bigint – PSR

+0

anche non firmato/firmato qui è grande differenza? – brabertaser19

3

Abbiamo eseguito test di simulazione ambiente.

  1. Creato in grado con 1 parametro BIGINT e 1VARCHAR.
  2. Righe 30Lac inserite.
  3. creato indice su entrambi i campi.
  4. Il risultato è: BIGINT risponde quasi a 20time's più veloce di VARCHAR.

Ecco script per eseguire i punti precedenti:

Create table r5(mob bigint,m_mob varchar(30)); 

Create index i_d on r5(mob,m_mob); 


do $$ 
begin 
for i in 1..3000000 loop 
insert into r5(mob,m_mob) values(i,i||’abc’); 
end loop; 
end; $$ 

select * from r5 
where mob=2900000; 

select * from r5 
where m_mob=’2900000abc’;