Non so se è più veloce ma sembra molto meno digitando...
SELECT x.*
, IF(@prev = dept_id
, IF(salary <> @psalary,@i:example@sqldat.com+1,@i:example@sqldat.com)
,@i:=1) rank
, @psalary := salary
, @prev := dept_id prev
FROM my_table x
, (SELECT @i:=1,@prev:='',@psalary:='') vars
ORDER
BY dept_id,salary;