Bonjour,
J'utilise une base de données avec 50000 tables dans une appli .NET. 99% de ces tables contiennent 2 champs de type BLOB.
Lorsque l'on utilise un OracleDataAdapter avec un CommandBuilder. la commande suivante est exécutée :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| SELECT c1, c2, c3
FROM (SELECT acc.column_name c1, acc.constraint_name c2,
ac.constraint_type c3
FROM all_cons_columns acc, all_constraints ac
WHERE (ac.constraint_type = 'P' OR ac.constraint_type = 'U')
AND ac.table_name = :b1
AND ac.owner = :b2
AND ac.table_name = acc.table_name
AND ac.owner = acc.owner
AND ac.constraint_name = acc.constraint_name
UNION
SELECT aic.column_name c1, ai.index_name c2, 'U' c3
FROM all_indexes ai, all_ind_columns aic
WHERE ai.uniqueness = 'UNIQUE'
AND ai.table_name = :b1
AND ai.table_owner = :b2
AND ai.table_name = aic.table_name
AND ai.table_owner = aic.table_owner
AND ai.index_name = aic.index_name
AND ai.owner = aic.index_owner)
ORDER BY 3, 2, 1 |
Cette commande prends 15 secondes à s'éxecuter !! ce qui est très lent ^^
On rempli l'Adapter en utilisant la méthode Fill(Dataset, string).
Est ce que cela ne devrait pas être plus rapide ?
Peut être ne faut il pas utiliser de DataAdapter avec une base de donnée de cette taille ?
Pour Information :
La commande
select count(*) from user_tables
prends 2 minutes à s'executer avec sqlplus. Résultat : 50600
La commande
select count(*) from user_indexes
prends 1 minute 50 avec sqlplus. Résultat : 113000
Merci d'avance
Partager