Voy a partir de tu pregunta fina:
- Comparar dos VARCHAR(20) implica que se deben igualar dos pares de 20 caracteres conforme caracter representado y collation usada.
- Comparar don BIGINT implica igualar dos valores de 8 bytes en su representación binaria.
¿Qué supones que es más rápido?
Exacto: El matching binario.
Ahora vamos a los detalles que pusiste:
Cita: creo la tabla users, con una FOREIGN KEY que en ves de hacer referencia al "provinceid" hace referencia al "provincename" , para que cuando haga un select en la tabla users no me aparezca un numero, y asi evito una consulta para saber que provincia es ese numero (espero me vayan entendiendo),
Eso es básicamente una tontería.
En primer lugar no necesitas hacer una consulta para saber a qué nombre de provincia corresponde ese ID. Únicamente necesitas
una consulta usando JOIN sobre ambas tablas al mismo tiempo.
Supongo que sabes usar los JOIN ¿No?
Bueno. Para recuperar el nombre ni siquiera necesitas invocar el ID en el SELECT, basta con ponerlo en el ON del FROM y usar el campo de nombre en el SELECT.
Por otro lado, el ejemplo de FK que usas es incorrecto. Una FK debe ser, por definición del paradigma E-R, una PK en la tabla origen,
y no es lo que estás haciendo.
MySQL
admite el uso de campos no PK en las FK pero sólo si el campo relacional usado es un campo UNIQUE (y por tanto clave candidata),
y tampoco es el caso, porque los estás definiendo como INDEX.
Finalmente: Por cuestiones de diseño, no es buena idea usar los nombres de localidades, provincias o lugares como PK por la simple razón que la denominación toponimia raramente es única, y el requisito ineludible de una PK es su unicidad.
Si te parece que estoy equivocado, podría preguntarte, por ejemplo, cuantas ciudades Pilar, Londres o Córdoba conoces.
Antes que te pongas a buscar, te advierto que en el mundo hay más de una de cada una de ellas, y en algunos países, como Argentina, hay casi una docena de localidades denominandas "Mercedes", "Santa María", "San Pedro" y muchas otras así.
En esos casos es preferible usar algún sistema de nomenclatura ya establecido, como puede ser el código postal, o en el caso de los países, el identificador telefónico.
P.D.: Ten paciencia para las respuestas. Los que participamos en los foros no
trabajamos en el foro y tu publicaste tu post a las 22:45 hora argentina.
¿Cuántos más crees que están sin dormir para participar de este tipo de foros?