Nous utilisons une table PL/SQL (appelée pTable) pour collecter un certain nombre d'identifiants à mettre à jour.Mise à jour lente lors de l'utilisation d'Oracle PL/SQL Table
Cependant, la déclaration
UPDATE aTable
SET aColumn = 1
WHERE id IN (SELECT COLUMN_VALUE
FROM TABLE (pTable));
prend beaucoup de temps à exécuter.
Il semble que l'optimiseur propose un plan d'exécution très mauvais, au lieu d'utiliser l'index défini sur id (en tant que clé primaire), il décide d'utiliser un scan de table complet sur aTable. pTable contient généralement très peu de valeurs (dans la plupart des cas un seul).
Que pouvons-nous faire pour accélérer les choses? Le meilleur que nous ayons trouvé est de gérer des pTable.Count bas (1 et 2) comme des cas spéciaux, mais ce n'est certainement pas très élégant.
Merci pour toutes les excellentes suggestions. J'ai écrit sur ce sujet dans mon blog au http://smartercoding.blogspot.com/2010/01/performance-issues-using-plsql-tables.html.
vous avez oublié quelque chose ici je pense où est la déclaration –
Oui désolé, j'ai appuyé sur le retour et que déjà posté la question. – Thorsten
Combien de lignes y a-t-il dans unTable? Y a-t-il d'autres index sur unTable? – Timothy