To speed-up operations on large table, you might use the SAMPLE clause to randomly extract a sample of data from your table, and then randomly pick one data from that sample:
select email from
( SELECT email,ROWNUM rn
FROM employees SAMPLE(5)
-- ^
-- each row has 5% chance of being picked-up
-- adjust that depending your table size and/or your needs
ORDER BY dbms_random.value)
where rn = 1;
An other idea is that you don't need a full sort just to extract one random row. For example, you might want to try that alternate approach:
with cte as (
SELECT email, ROWNUM rn
FROM employees
),
rnd as (
SELECT TRUNC(DBMS_RANDOM.VALUE(1, (SELECT COUNT(*) FROM CTE))) AS value FROM DUAL
)
SELECT cte.email FROM cte JOIN rnd
ON cte.rn = rnd.value;
I don't know if Oracle is able to "properly" optimize such queries though.
LIMITin Oracle nor arand()function. Please read the manual