2010-08-08 5 views
4

J'ai une table avec environ 35 millions de lignes. chacun a environ 35 valeurs entières et une valeur de temps (dernière mise à jour) La table a deux index primaire - utilise deux valeurs entières des colonnes de la table Secondary - utilise le 1er entier de la valeur primaire + un autre nombre entier.Quel est le moyen le plus rapide pour supprimer les anciens enregistrements

Je voudrais supprimer les anciens enregistrements (environ 20 millions d'entre eux) en fonction du champ de date.

Quel est le moyen le plus rapide: 1. Supprimer tel quel selon le champ de date? 2. Créez un autre index par date, puis supprimez-le par date.

Une grande partie des données sera supprimée une fois, puis une suppression hebdomadaire incrémentielle de parties beaucoup plus petites.

Existe-t-il une autre façon de le faire plus efficacement?

Répondre

8

il pourrait être plus rapide pour créer une nouvelle table contenant les lignes que vous souhaitez conserver, laissez tomber la vieille table, puis renommer la nouvelle table

+0

Excellente idée! Je vais faire un test sur un ordinateur de développement pour voir comment cela fonctionne. – Nir

3

Pour les suppressions hebdomadaires un indice sur le champ de date permettrait d'accélérer les choses.

0

Le plus rapide (mais pas le plus facile) - je pense - est de garder vos enregistrements segmentés en plusieurs tables basées sur la date, par exemple. semaine donnée, puis avoir une table de tous les tableaux pour les requêtes régulières à travers le tout (donc vos questions seraient inchangées). Vous créeriez chaque semaine de nouvelles tables et redéfiniriez la table d'union. Lorsque vous souhaitez supprimer des anciens enregistrements, vous devez simplement recréer la table de syndication pour laisser les enregistrements dans les anciens tableaux, puis supprimer ceux qui restent (n'oubliez pas de tronquer avant de déposer en fonction de votre système de fichiers). C'est probablement le moyen le plus rapide d'y arriver avec MySQL. Un désordre à gérer cependant :)

Questions connexes