次のクエリは定期的に実行する必要はなく、cronジョブに移動できます:
DELETE FROM failures WHERE release_time < ?;
この「ブール」クエリは、その人がブラックリストに登録されている場合は1を返し、そうでない場合は0を返します。
SELECT
COUNT(ip_address) as blacklisted
FROM blacklist
WHERE
ip_address = ? AND
release_time > ? AND
failures > 5
PHPを使用して行をカウントしたり、数値を比較したりしないと、処理が高速化される可能性があります。
if ($row['blacklisted']) { /* ... */ }
最後のものを本当に避けることはできないと思います。