O MySQL tem algum suporte especial para esse tipo de coisa. Primeiro, inclua
SQL_CALC_FOUND_ROWS
em seu SELECT:SELECT SQL_CALC_FOUND_ROWS *
FROM Badges
WHERE UID = '$user'
ORDER by Date DESC
LIMIT 10 -- Or whatever
Em seguida, retire suas linhas e imediatamente olhe para
FOUND_ROWS()
assim:SELECT FOUND_ROWS()
para obter o número de linhas que corresponderam à sua consulta original sem considerar a cláusula LIMIT.
Isso é específico do MySQL, mas deve ser um pouco mais rápido do que fazer duas consultas.