Dites des enregistrements 10-20K pour mettre à jour dans une donnée SQL Server, et je dois faire quelque chose comme ce qui suit: -
UPDATE dbo.MyTable SET Field1 = 95 WHERE MyTableID = 348923 UPDATE dbo.MyTable SET Field1 = 90 WHERE MyTableID = 348924 UPDATE dbo.MyTable SET Field1 = 100 WHERE MyTableID = 348925
Quelqu'un peut-il informer quelle est la manière la plus efficace de le faire? P>
Merci. P> P>
4 Réponses :
Exécution de plusieurs requêtes peut être une approche efficace, car elle peut tirer parti de l'indice de clé primaire.
Vous pouvez également essayer d'utiliser des expressions conditionnelles, telles que: p>
WHERE MyTableID BETWEEN 348923 AND 348925
dans SQL Server, je recommanderais un Ceci devrait avoir essentiellement la même performance que l'utilisation de code>. Je trouve plus facile de gérer. Et beaucoup plus simple si vous souhaitez définir plusieurs colonnes. P> p> joindre code>:
Préparez un modèle de script Pour gérer les mises à jour en créant une variable de table comme ci-dessous
update t set t.Field1 = tbl.Field1 from dbo.MyTable t inner join @your_tbl_name tbl on t.MyTableID = tbl.MyTableID
Je pense que Gordon Linoff a offert une excellente approche. Pour déterminer si cela est possible, avez-vous besoin de mises à jour instantanées ou pouvez-vous les lotter?
Si vous pouvez les combiner, déterminez la fréquence à laquelle les mises à jour doivent réfléchir sur la table principale. Vous avez peut-être plus de chance d'ajouter toutes les modifications dans une table de mise en scène, puis d'exécution de mises à jour ultérieures. Cela dépend vraiment de la performance dont vous avez besoin et de ce qui mange votre performance aujourd'hui. Si vous avez un groupe d'utilisateurs individuels, toutes les mises à jour utilisent simultanément et que chaque utilisateur doit être en mesure de mettre à jour les données distinctes instantanément, il existe différentes approches à prendre en compte. Toutefois, si vous pouvez gérer la mise à jour de ces valeurs que de temps en temps, chariçez-les! Je reçois une tonne de mises à jour des entreprises qui vendent à ma société, et c'est la route que j'ai dû prendre pour l'efficacité. P>
Voici comment ce lot ressemblerait si vous pouvez utiliser une table de mise en scène. P>
--Creates a staging table create table dbo.StageUpdates ( ID int primary key , NewValue int ) --Adds values to update to staging table insert into dbo.StageUpdates VALUES (348923, 95) ,(348924, 90) ,(348925, 100) --Update values update dbo.MyTable set Field1 = NewValue from dbo.MyTable as mt inner join dbo.StageUpdates as su on mt.ID = su.ID where su.NewValue <> mt.Field1 --Modify this if either value can be null. --Clear updated values from stage delete from dbo.StageUpdates from dbo.StageUpdates as su inner join dbo.MyTable as mt on su.ID = mt.ID where su.NewValue <> mt.Field1 --Modify this if either value can be null.