Je suis en train de mettre à jour une table avec des millions d'enregistrements, cela fait 4 jours et la requête est toujours en cours d'exécution.
J'ai vérifié que le moniteur d'activité montre que la requête est en cours d'exécution.
Dans le journal des événements, il n'y a aucune erreur.
En termes de performances:
- Tempdb dans le disque A (850 Go d'espace libre)
- fichier de base de données sur le disque B (750 Go d'espace libre)
- 16 Go de RAM
Veuillez me suggérer que dois-je faire?
La requête
UPDATE
dbo.table1
SET
costPercentage = ISNULL(t2.PaymentIndex, 1.0),
t2.TopUp_Amt = (ISNULL(t2.PaymentIndex, 1.0) - 1.0)
* ISNULL(dbo.table1.Initial_Tariff_Amt, 0.00),
Total_Tariff_Inc_t2 = ISNULL(t2.PaymentIndex, 1.0)
* ISNULL(dbo.table1.Initial_Tariff_Amt, 0.00)
FROM
dbo.table2 t2
WHERE
LEFT(dbo.test1.procodet, 3) = LEFT(t2.ProviderCode, 3) COLLATE database_default
la source
Tout d'abord, changez la requête en:
Comme indiqué par le premier post de Jeff Moden dans cette discussion , votre requête est très similaire à celle qu'il a mise en garde contre "l'effet Halloween".
Après cela, ces expressions LEFT doivent être indexées. La réponse de gbn vous donne des indications sur la façon de procéder.
la source