In a precise data race detector, a race is detected only if the execution exhibits a real race. In such tools, every memory access from each thread is typically checked by a happens-before algorithm. What’s the optimal runtime performance of such tools? In this paper, we identify that a significant percentage of memory access checks in real-world program executions are often redundant: removing these checks neither affect the precision nor the capability of race detection. We show that if all such redundant checks were eliminated the performance of a state-of-the-art dynamic race detector, FastTrack, could be improved by 95%, reducing its runtime overhead from 77X to 3.4X on a collection of CPU intensive benchmarks running a large number of threads. We further develop a purely dynamic technique, ReX, that efficiently filters out redundant checks and apply it FastTrack. With ReX, the runtime performance of FastTrack is improved by 25% on average.