Följande fråga behöver inte köras regelbundet och kan flyttas till ett cron-jobb:
DELETE FROM failures WHERE release_time < ?;
Denna "booleska" fråga returnerar 1 om personen är svartlistad, 0 annars:
SELECT
COUNT(ip_address) as blacklisted
FROM blacklist
WHERE
ip_address = ? AND
release_time > ? AND
failures > 5
Det kan påskynda saker och ting eftersom du inte använder PHP för att räkna rader och jämföra siffror:
if ($row['blacklisted']) { /* ... */ }
Jag tror inte att du kan undvika det sista egentligen.