Maybe MySQL executes the subquery again and again even for repeated dataA. The following statement just finds the max(dataB) once for each dataA. The rest is a simple join. Hope this is faster.
select t.*
from t
join (select dataA, max(dataB) as maxDataB from t group by dataA) max_t
on t.dataA = max_t.dataA and t.dataB = max_t.maxDataB;
EDIT: Here is your SQL fiddle: http://sqlfiddle.com/#!2/4c9b4/2.