Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Método mais eficiente para expirar registros após 10 minutos da criação


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.