Následující dotaz není nutné spouštět pravidelně a lze jej přesunout do úlohy cron:
DELETE FROM failures WHERE release_time < ?;
Tento „booleovský“ dotaz vrátí 1, pokud je osoba na černé listině, v opačném případě 0:
SELECT
COUNT(ip_address) as blacklisted
FROM blacklist
WHERE
ip_address = ? AND
release_time > ? AND
failures > 5
Mohlo by to urychlit, protože nepoužíváte PHP k počítání řádků a porovnávání čísel:
if ($row['blacklisted']) { /* ... */ }
Myslím, že tomu poslednímu se opravdu nevyhnete.