Jeśli masz tylko tabelę tagów (nie tabelę kategorii), jest to bardziej zoptymalizowany początek:
SELECT article_id,count(*) AS q
FROM article_tags
WHERE id_tag IN (
SELECT id_tag
FROM article_tags
WHERE article_id=41
)
AND article_id!=41
GROUP BY article_id
ORDER BY q DESC