se os dados inseridos serão sempre 20 caracteres do que por que não considerar o uso de char(20) . usar varchar(20) usará 20 bytes para armazenar caracteres e 1 byte para armazenar comprimento. portanto, se houver 1 milhão de registros, 1 milhão de bytes serão desperdiçados.
no que diz respeito à velocidade entre varchar(20) e varchar(255), então não acho que seja muito difícil escolher um deles, ambos usarão 21 bytes, não vejo nenhum benefício ou perda significativa de desempenho de um sobre o outro.