A maneira mais eficiente de fazer isso é usar uma visualização. Huh? O que isso tem a ver com o problema? Bem, não faça a exclusão 10 minutos depois das enfermarias. Em vez disso, crie uma exibição com a seguinte lógica:
create view v_recoveries as
select r.*
from recoveries r
where expiry > date_sub(now(), interval 10 minutes);
Para desempenho, você deseja um índice em
recoveries(expiry)
, então isso deve ser rápido. Então, quando quiser - uma vez por encontro, ou uma vez por hora, ou uma vez por semana - exclua registros desnecessários com:
DELETE FROM `recoveries`
WHERE `expiry` <= date_sub(now(), interval 10 minutes);
Esta abordagem tem várias vantagens:
- A presença de dados é de exatamente 10 minutos, em vez de se basear no agendamento de algum trabalho.
- As exclusões reais podem ocorrer quando o sistema está inativo.
- Se um cron job não for executado, os dados não estão "corrompidos", ou seja, você não obtém dados muito antigos.
- Se o sistema estiver ocupado (muitas inserções), as inserções não estarão competindo com as exclusões, deixando o sistema ainda mais lento.