2015-04-14 3 views
0

J'ai une copie de «journal expédié» d'une base de données qui vit chez un tiers. L'envoi des journaux s'exécute toutes les 15 minutes, après quoi toutes les connexions à la base de données sont supprimées. La base de données est utilisée à des fins de reporting.MERGE vs DROP Table et recréer des index dans SQL Server

J'ai décidé de tirer certaines données de la base de données de journaux expédiés (lecture seule) dans une nouvelle base de données actualisée tous les soirs. Cela permettra aux utilisateurs de se connecter à la nouvelle base de données sans risquer de perdre la connectivité en raison de l'envoi de journaux. (Cela permet également d'utiliser des autorisations de sécurité plus granulaires, puisque la copie en lecture seule ne peut pas être modifiée)

Je peux penser à 2 modèles pour y parvenir.

  1. drop Table, Créer table, créer des index
  2. utiliser l'instruction MERGE pour insérer/mettre à jour/supprimer des enregistrements

J'ai mis en œuvre en utilisant la solution la méthode 1 ci-dessus, et cela fonctionne très bien.

Il me semble un peu lourd d'abandonner toutes les données tous les jours. Y a-t-il des effets secondaires à la méthode 1 ci-dessus qui devraient me pousser à utiliser la méthode 2?

Pour donner une idée de l'échelle, je ne fais que synchronisez 3 tables,

Table 1 - 38 columns - 13,110 rows 
Table 2 - 82 columns - 17,421 rows 
Table 3 - 22 columns - 249 rows 

La base de données est d'environ 1,3 Go. (Il y a d'autres tableaux ici aussi)

J'apprécierais les conseils sur la méthode 1 par rapport à 2, et s'il existe une autre méthode à laquelle je ne pense pas.

+0

Avez-vous examiné la réplication transactionnelle? Je n'ai pas assez de savoir-faire pour vraiment aider davantage, mais cela pourrait être une option à regarder – mxix

+0

Je n'ai pas examiné cela dans le contexte de cette question, car l'envoi de journaux est la méthode que notre fournisseur prend en charge pour nous avoir une copie des données. Je suppose que puisque la copie log-expédiée est en lecture seule, je ne pouvais pas l'utiliser pour la réplication transactionnelle. –

Répondre

2

TRUNCATE et INSERT serait plus efficace que l'abandon ou la fusion.

+0

J'aime ça. Je vais essayer, et le comparer à mon drop/create. Merci! (Je vais re-visiter cette question plus tard aujourd'hui une fois que je donnerai un coup de pied aux pneus). –

+0

Merci pour ça. Du point de vue de l'horloge, les deux méthodes se terminent en ~ 12 secondes. J'aime la façon dont 'TRUNCATE' et' INSERT INTO' sont comparés à la reconstruction de tous les index. J'ai dû apporter une légère modification à mes procédures stockées pour utiliser les tables CTE plutôt que #Temp pour que le 'INSERT INTO' fonctionne, mais avec cet obstacle, j'ai maintenant un code plus propre. Merci. –