sql >> Databasteknik >  >> RDS >> Mysql

Den mest effektiva metoden för att förfalla poster efter 10 minuter från skapande

Det mest effektiva sättet att göra detta är att använda en vy. Va? Vad har det med problemet att göra? Tja, gör inte borttagningen 10 minuter efter avdelningarna. Skapa istället en vy med följande logik:

create view v_recoveries as
    select r.*
    from recoveries r
    where expiry > date_sub(now(), interval 10 minutes);

För prestanda vill du ha ett index på recoveries(expiry) , så det här borde gå snabbt.

Ta sedan bort onödiga poster på din fritid -- en gång per datum, eller en gång i timmen eller en gång i veckan -- med:

DELETE FROM `recoveries`
    WHERE `expiry` <= date_sub(now(), interval 10 minutes);

Detta tillvägagångssätt har flera fördelar:

  • Närvaron av data är exakt 10 minuter, snarare än baserat på schemaläggning av något jobb.
  • De faktiska raderingarna kan ske när systemet är tyst.
  • Om ett cron-jobb misslyckas med att exekvera är data inte "skadade" – det vill säga du får inte data som är för gammal.
  • Om systemet är upptaget (många infogningar) konkurrerar inte bilagorna med borttagningar, vilket saktar ner systemet ytterligare.


  1. MySQL, Kontrollera om det finns en kolumn i en tabell med SQL

  2. SQL:UPPDATERING med INNER JOIN med LIMIT

  3. Javascript och PHP nedräkningstimer som visar samma för alla

  4. Php - Din PHP-installation verkar sakna MySQL-tillägget som krävs av WordPress