si los datos ingresados siempre serán 20 caracteres que por qué no considerar usar char(20) . el uso de varchar (20) utilizará 20 bytes para almacenar caracteres y 1 byte para almacenar longitud. por lo tanto, si hay 1 millón de registros, se desperdiciará 1 millón de bytes.
en lo que respecta a la velocidad entre varchar (20) y varchar (255), entonces no creo que sea muy difícil elegir uno de ellos, ambos usarán 21 bytes, no veo ningún beneficio o pérdida de rendimiento significativo de uno sobre otro.