Dipende dagli indici. Se entrambe le colonne hanno indici impostati, dovresti eseguire il cast su int
, perché deve confrontare solo 4 byte. Se, invece, solo il varchar
colonna è indicizzata, cast su varchar
.
Alla fine, dovresti avere la tua domanda explain
ed, per vedere quale indice viene utilizzato e lanciare di conseguenza.
Se non è impostato alcun indice, trasmettere a int
è l'approccio migliore in generale. Tuttavia, se non c'è un set di indici, non importa, risparmieresti molto più tempo indicizzando che scegliendo il modo corretto di trasmettere. Tranne, ancora una volta, i tavoli sono piccoli. Quindi, non importa nemmeno.
In effetti, dovremmo prendere in considerazione non solo i costi per il confronto, ma anche per il casting:Casting an int
a un varchar
è leggermente più veloce dell'analisi di un varchar
a un int
. Tuttavia, confrontare un varchar che ha almeno 4 caratteri renderà inutile quel vantaggio. Se i tuoi valori tendono a essere superiori a 999, esegui il cast su int
sarà più veloce. Ma questo ora dipende dal tuo sistema operativo, dall'architettura, dal set di istruzioni utilizzato dal tuo binario mysql e così via. L'unico modo per ottenere una risposta davvero affidabile è:confrontare quella situazione sulla macchina di destinazione.