Porównania typu int są szybsze niż porównania varchar, z prostego faktu, że int zajmują znacznie mniej miejsca niż varchary.
Dotyczy to zarówno dostępu nieindeksowanego, jak i indeksowanego. Najszybszym sposobem jest indeksowana kolumna int.
Jak widzę, otagowałeś pytanie postgreql, być może zainteresuje Cię wykorzystanie miejsca w różnych typach dat:
int
pola zajmują od 2 do 8 bajtów, przy czym 4 to zwykle więcej niż wystarczająco ( od -2147483648 do +2147483647 )- Typy znaków zajmują 4 bajty plus rzeczywiste ciągi.