Il n'y a probablement aucun index sur la colonne tableA.id
ou le type de tableA.id
ne correspond pas au type renvoyé par select
.
[EDIT] Vous pouvez essayer cette syntaxe bizarre:
update (
select val1, val2 from tableA A
LEFT JOIN tableB B ON A.col1=B.col1 and A.col2=B.col2
where A.col3='xx' and B.col3= 'YY'
) tmp
set val1='X', val2='Y'
Cela crée une table temporaire qui est toujours liée à la table d'origine, de sorte que vous pouvez mettre à jour les valeurs qui le retour de sélection et ils apparaître dans le tableau d'origine.
[EDIT2] J'ai manqué le fait que vous sélectionnez et mettez à jour la même table (c'est-à-dire id
est la même colonne). Dans ce cas, le type n'a évidemment pas d'importance et vous ne devriez même pas avoir besoin d'un index (puisque le select renvoie déjà les lignes correctes).
Essayez EXPLAIN PLAN
pour voir si quelque chose d'autre se passe. En outre, vous pourriez entrer en conflit avec un autre processus qui met également à jour la même table (c'est-à-dire que vous avez un verrou quelque part). AQT a un moniteur qui peut montrer ces choses. Si vous le pouvez, obtenez l'AQT et utilisez-le. Il a un excellent support pour DB2 et est meilleur que tout ce que j'ai vu jusqu'ici.
Il exécute probablement la requête interne pour chaque ligne de la tableA. Quelle base de données utilisez-vous? –
base de données est DB2 – Peter
y a-t-il des index sur la table A impliquant les colonnes modifiées? Le temps système peut ralentir le processus –