Supprimer efficacement les anciens enregistrements MySQL : conserver uniquement les derniers N
MySQL ne prend pas directement en charge la suppression d'enregistrements avec une clause LIMIT
dans une sous-requête. Cependant, nous pouvons y parvenir en utilisant des sous-requêtes imbriquées pour une solution propre.
Disons que vous devez supprimer toutes les entrées sauf les N les plus récentes, classées par colonne id
(décroissante). Cette approche évite l'écueil courant de l'utilisation de LIMIT
directement dans l'instruction DELETE
:
La requête suivante y parvient efficacement :
<code class="language-sql">DELETE FROM `table` WHERE id NOT IN ( SELECT id FROM ( SELECT id FROM `table` ORDER BY id DESC LIMIT N ) as latest_records );</code>
Cette requête exploite une sous-requête (latest_records
) pour identifier les identifiants des N enregistrements les plus récents. L'instruction DELETE
externe supprime ensuite toutes les lignes dont les ID ne sont pas dans cet ensemble.
N'oubliez pas que les performances peuvent être encore optimisées en fonction de la structure de votre table et du volume de données spécifiques. Pensez à ajouter des index à la colonne id
pour des améliorations significatives des performances.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!