0
votes

SQL Server - moyen le plus efficacement de faire plusieurs mises à jour lorsque la cause est une pièce d'identité unique

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
  • Curseur (à la recherche actuellement préférable) LI>
  • Liste unique de la mise à jour comme ci-dessus et juste traiter avec la lenteur li> ul>

    Quelqu'un peut-il informer quelle est la manière la plus efficace de le faire? P>

    Merci. P> P>


0 commentaires

4 Réponses :


1
votes

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


0 commentaires

1
votes

dans SQL Server, je recommanderais un joindre : xxx

Ceci devrait avoir essentiellement la même performance que l'utilisation de . Je trouve plus facile de gérer. Et beaucoup plus simple si vous souhaitez définir plusieurs colonnes.


0 commentaires

1
votes

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


0 commentaires

1
votes

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.


0 commentaires