Maison > base de données > tutoriel mysql > Comment supprimer tous les enregistrements sauf les N derniers dans une table MySQL ?

Comment supprimer tous les enregistrements sauf les N derniers dans une table MySQL ?

DDD
Libérer: 2025-01-08 16:21:42
original
882 Les gens l'ont consulté

How to Delete All but the Latest N Records in a MySQL Table?

Supprimer efficacement les anciens enregistrements MySQL, en ne conservant que les derniers N

La suppression de toutes les entrées, sauf les N plus récentes, dans une table MySQL nécessite une construction minutieuse des requêtes. Une approche simple utilisant LIMIT dans une instruction DELETE échoue souvent en raison des limitations de MySQL.

Une tentative erronée courante ressemble à ceci :

<code class="language-sql">DELETE FROM `table`
ORDER BY `id` ASC
LIMIT ((SELECT COUNT(*) FROM `table`) - N);</code>
Copier après la connexion

Cela échoue car MySQL n'autorise pas les sous-requêtes directement dans la clause LIMIT.

Une solution robuste utilise une sous-requête imbriquée :

<code class="language-sql">DELETE FROM `table`
WHERE `id` NOT IN (
  SELECT `id`
  FROM (
    SELECT `id`
    FROM `table`
    ORDER BY `id` DESC
    LIMIT 42 -- Replace 42 with your desired N
  ) AS `subquery`
);</code>
Copier après la connexion

Cette méthode sélectionne d'abord les ID des N enregistrements les plus récents (classés par id décroissant) à l'aide d'une sous-requête interne. La requête externe supprime ensuite tous les enregistrements dont les ID ne sont pas présents dans cette sélection interne. Cela ne conserve effectivement que les N dernières entrées.

N'oubliez pas de remplacer 42 par la valeur souhaitée de N. Pour des performances optimales avec de grands ensembles de données, des techniques d'optimisation supplémentaires peuvent être nécessaires. Explorez des approches alternatives et envisagez d'indexer votre colonne id pour des améliorations de vitesse significatives. Consultez des ressources supplémentaires pour des solutions avancées adaptées aux besoins de performances spécifiques.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal