MySQL tiene un soporte especial para este tipo de cosas. Primero, incluya SQL_CALC_FOUND_ROWS
en su SELECT:
SELECT SQL_CALC_FOUND_ROWS *
FROM Badges
WHERE UID = '$user'
ORDER by Date DESC
LIMIT 10 -- Or whatever
Luego extraiga sus filas e inmediatamente mire FOUND_ROWS()
así:
SELECT FOUND_ROWS()
para obtener el número de filas que coincidieron con su consulta original sin tener en cuenta la cláusula LIMIT.
Esto es específico de MySQL, pero debería ser un poco más rápido que hacer dos consultas.