I confronti int sono più veloci dei confronti varchar, per il semplice fatto che gli int occupano molto meno spazio di varchars.
Ciò vale sia per l'accesso non indicizzato che per quello indicizzato. Il modo più veloce per procedere è una colonna int indicizzata.
Come vedo che hai taggato la domanda postgreql, potresti essere interessato all'utilizzo dello spazio di diversi tipi di date:
int
i campi occupano tra 2 e 8 byte, con 4 generalmente più che sufficienti (da -2147483648 a +2147483647)- I tipi di carattere occupano 4 byte più le stringhe effettive.