Eso depende de los índices. Si ambas columnas tienen índices establecidos, debe convertir a int
, porque solo necesita comparar 4 bytes. Sin embargo, si solo el varchar
la columna está indexada, convertida en varchar
.
Al final, debería tener su consulta explain
ed, para ver qué índice se utiliza y convertir en consecuencia.
Si no se establece un índice, conversión a int
es el mejor enfoque en general. Sin embargo, si no hay un conjunto de índices, realmente no importa, ahorraría mucho más tiempo indexando que eligiendo la forma correcta de emitir. Excepto, de nuevo, que las mesas son pequeñas. Entonces, tampoco importa.
De hecho, debemos tener en cuenta no solo los costos de comparación, sino también los de conversión:Casting an int
a un varchar
es un poco más rápido que analizar un varchar
a un int
. Sin embargo, comparar un varchar que tiene al menos 4 caracteres hará que esa ventaja sea inútil. Si sus valores tienden a ser superiores a 999, transmita a int
será más rápido. Pero eso ahora depende de su sistema operativo, la arquitectura, el conjunto de instrucciones utilizado por su binario mysql, etc. La única forma de obtener una respuesta realmente confiable es:comparar esa situación en la máquina de destino.