J'ai quelques milliers d'enregistrements et je dois les mettre à jour par lots de 350 enregistrements.
J'aimerais savoir s'il y a une différence entre les deux instructions de mise à jour ci-dessous et si l'une d'entre elles fonctionnerait plus rapidement, utilisez moins de ressources de base de données, etc.
UPDATE TOP (350) database1
SET value1 = '', value2 ='', value3 = ''
WHERE value1 = '123'
UPDATE database1
SET value1 = '', value2 ='', value3 = ''
WHERE ID in
(SELECT TOP 350 ID FROM database1
WHERE value1 = '123')
La première déclaration sera plus rapide. Mais les 150 meilleurs enregistrements sont choisis au hasard. Les enregistrements mis à jour dans les deux requêtes peuvent ne pas être identiques. Puisque vous crivez les mises à jour par lots, votre approche peut ne pas mettre à jour tous les enregistrements.
Je vais le faire en utilisant l'approche suivante cohérente que votre approche.
;WITH cte
AS (SELECT TOP (350) value1,
value2,
value3
FROM database1
WHERE value1 = '123'
ORDER BY ID -- or any other column to order the result
)
UPDATE cte
SET value1 = '',
value2 = '',
value3 = ''
De plus, vous n'avez pas à vous soucier de la taille du journal des transactions lors de la mise à jour quelques milliers d'enregistrements il n'y a pas besoin de lots ici
Filtrez les données de la base de données1 puis joignez-vous par identifiant. Les méthodes ci-dessous sont plus réalistes pour la sélection et la mise à jour des données.
UPDATE database1
SET value1 = '', value2 ='', value3 = ''
FROM (
SELECT top 350 ID
FROM database1
WHERE value1 = '123'
) as db1
WHERE db1.ID = database1.ID