2011-08-11 3 views
2

Dans mon cas, je veux maintenir une table pour stocker un certain type de données et après un certain temps retirer de la première table et stocker dans une autre table.Quelle est la meilleure pratique pour supprimer des données de la table de base de données?

Je veux clarifier la meilleure pratique dans ce genre de scénario. J'utilise la base de données MySQL dans l'application de base Java.

+0

Tout dépend du scénario. Donne-nous plus d'informations sur la quantité de données, la fréquence, l'impact probable de l'indexation, etc. –

+1

Si vous archivez des données, vous pouvez les supprimer entièrement de votre base de données, plutôt que de les "déplacer". à une autre table " –

+0

@Preet Les deux tables peuvent avoir des milliers de lignes de données. En fait, ce que je veux, c'est qu'après un processus métier, supprimer les données de la première table et les ajouter à une autre table. Je veux clarifier en enlevant une partie. Quelle est la meilleure façon de le faire et dois-je me soucier de la clé primaire (incrément automatique) de la première table. Parce que encore une fois remplir avec un nouvel ensemble de données. – Lan

Répondre

6

Généralement, je suis cette procédure. Incase Je veux supprimer une ligne. J'ai une colonne tinyint appelée deleted. Je marque cette colonne pour cette ligne comme true.

Cela indique que cette ligne a été marquée comme supprimée, donc je ne sais pas, ramasser.

plus tard (peut-être une fois par jour), je lance un script qui, dans un seul coup, soit supprimer les lignes entièrement ou les migrer vers une autre table ... etc.

Ceci est utile que chaque fois que vous supprimez un row (même si c'est une ligne), mysql doit réindexer (c'est des index). Cela peut nécessiter des ressources système importantes en fonction de la taille de vos données ou du nombre d'index. Vous ne voulez peut-être pas payer ces frais généraux à chaque fois ...

+1

Ajoutez une vue pour sélectionner uniquement les enregistrements actifs utilisés par l'application pour afficher les données. De cette façon, vous n'oublierez pas et n'afficherez pas les enregistrements supprimés avant qu'ils ne soient physiquement supprimés ou déplacés vers une table d'archivage. – HLGEM

0

Vous n'avez pas fourni suffisamment d'informations mais je pense que si les deux tables ont la même structure de données, vous pouvez éviter d'utiliser deux tables. Ajoutez simplement une autre colonne dans la première table et définissez status/type pour les enregistrements de seconde table particuliers.

Exemple:

id | Name | BirthDate | type 
------------------------------------ 
1 | ABC | 01-10-2001 | firsttable 
2 | XYZ | 01-01-2000 | secondtable 

Vous pouvez choisir des dossiers comme celui-ci:

select * from tablename where type='firsttable' 

OU

select * from tablename where type='secondtable' 
0

Si vous archivez les anciennes données, il devrait y avoir un moyen mettre en place un travail planifié dans mysql. Je sais qu'il existe dans SQL Server et c'est le genre de fonction dont la plupart des bases de données ont besoin, alors j'imagine que cela peut être fait dans mySQL. Shecdule le travail à exécuter dans les heures de faible utilisation. Avez-vous sélectionné tous les enregistrements datant d'il y a plus d'un an (ou la durée des enregistrements que vous voulez conserver actifs) et déplacez-les vers une table d'archivage, puis supprimez-les. Selon le nombre d'enregistrements que vous souhaitez transférer, il est préférable de le faire une fois par semaine ou tous les jours. Vous ne voulez pas que le nombre d'enregistrements expirant soit trop important, cela affecte considérablement les performances ou rend le travail trop long. Dans le domaine de l'archivage, l'essentiel est de vous assurer de conserver tous les documents dont vous aurez besoin fréquemment et n'oubliez pas d'en faire rapport (de nombreux rapports doivent avoir des années ou deux années de données, ne pas archiver les enregistrements dont ces rapports devraient avoir besoin). Ensuite, vous devez également configurer un moyen pour les utilisateurs d'accéder aux enregistrements archivés dans les rares occasions où ils peuvent avoir besoin de les voir.

Questions connexes