I\'ve got a database with a 40k venues and growing right now.
Assuming I\'m the red dot

I
Create a "bounding box" to use in a WHERE clause in your SQL query as described in this article on Movable Type (with PHP code examples), then include the Haversine formula in your query to calculate the actual distances, and order the result by distance ASC. The nearest venue will then be the first return in the result set.
It's the bounding box that helps your performance, because it means you're only doing the expensive distance calculation on a small subset of your data
If the initial query doesn't return any records, widen the bounding box, and execute the query again until you do get a response.