It probably depends on what one is looking for. Nasser's suggestion seems to be the fastest one:
(Outer[Equal, {3}, RandomInteger[3, 10^6]] //Flatten); // AbsoluteTiming
(*{0.167448, Null}*)
It only takes a third of the time that mine takes.
This is the shortest one in terms of symbols used:
(# == 3) & /@ RandomInteger[3, 10^6]; // AbsoluteTiming
(*{0.467847, Null}*)
This one's quite clear to read...
Thread[RandomInteger[3, 10^6] == 3]; // AbsoluteTiming
(*{0.247238, Null}*)
M.