2010-09-24 3 views
6

Je dois trouver le meilleur moyen d'insérer ou de mettre à jour des données dans la base de données en utilisant sql server et asp.net. C'est un scénario standard si les données existent, elles sont mises à jour sinon elles sont insérées. Je sais qu'il y a beaucoup de sujets à ce sujet, mais personne n'a répondu à ce que j'ai besoin de savoir.Insertion en masse/mise à jour du serveur Sql par MERGE dans un scénario d'insertion ou de mise à jour

Donc, mon problème est qu'il n'y a vraiment aucun problème lorsque vous mettez à jour/insérer des lignes 5k - 10k mais avec 50k et plus.

Ma première idée était d'utiliser SQL Server 2008 MERGE commande, mais j'ai quelques considérations de performance si ce sera 50k + lignes. Aussi, je ne sais pas si je peux marger des données de cette façon en ne basant pas sur la clé d'identification primaire (int) mais sur une autre clé unique dans la table. (pour être précis, un numéro de série du produit qui ne changera pas dans le temps). Ma deuxième idée était d'obtenir d'abord toutes les publications en série, puis de comparer les nouvelles séries de données avec celles-ci et de les diviser en données à insérer et données à mettre à jour, puis de faire une insertion groupée et une mise à jour groupée.

Je ne sais pas ce qui va être mieux, avec MERGE je ne sais pas ce que la performance sera et il est pris en charge uniquement par sql server 2008, mais il semble assez simple, la deuxième option n'a pas besoin sql 2008, les lots devraient être rapides mais sélectionner d'abord toutes les séries et diviser en fonction de celles-ci pourrait avoir des pénalités de performance.

Que pensez-vous, que choisir?

+0

Décidez-vous d'effectuer la mise à niveau vers 2008 ou distribuez-vous une application qui peut nécessiter plusieurs versions de SQL Server? Parce que si vous l'avez déjà, vous devriez être capable de tester Merge pour les performances. – JeffO

+0

Yeh, je vais devoir mettre à niveau pour utiliser la marge, ce n'est pas un problème, mais si la marge est pire dans la performance, je ne sais pas si ça en vaut la peine. – Programista

Répondre

4

Fusion performace beaucoup mieux parce que « L'un des avantages les plus importants de la déclaration de MERGE est toutes les données sont lues et traitées une seule fois »

Vous ne avez pas besoin d'une clé primaire, vous pouvez vous joindre à un ou plusieurs champs ce rend vos enregistrements uniques

+0

Je ne comprends pas. –

+0

partie de sorcière vous ne obtenez pas? – Ivo

+0

Il n'y a pas de fusion en masse. Comment peut-il être «bien meilleur» dans le contexte de l'insertion et de la mise à jour en masse? –

2

Il ne devrait pas y avoir de problème pour effectuer la fusion sur le numéro de série tel que vous l'avez décrit. Vous souhaiterez peut-être lire Optimizing MERGE Statement Performance pour les meilleures pratiques recommandées par Microsoft lors de l'utilisation de MERGE.

Questions connexes