TABLE_A = 7022536 lignescount() prendre plus de 20 secondes
Table_b (GTT) = 5601 lignes
Requête:
SELECT COUNT (a.ssn_head)
FROM table_a a, table_b b
WHERE b.hoh = a.head AND a.flag = 'Y';
prend plus de 20 secondes pour faire 17214 enregistrements.
Expliquer plan est:
Plan hash value: 1901401324
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | C
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 25 | 1
| 1 | SORT AGGREGATE | | 1 | 25 |
|* 2 | HASH JOIN | | 114K| 2801K| 1
| 3 | TABLE ACCESS FULL| table_b | 49188 | 528K|
| 4 | REMOTE | table_a | 7022K| 93M| 1
--------------------------------------------------------------------------------
table_b
(GTT) n'a pas d'indices à ce sujet ... Je pense que depuis la requête passe par tous table_b il fera toujours une scan..right complète de la table?
table_a
a index sur head
Quelle autre façon est là pour faire de cette requête exécutée plus rapidement?
Déplacer table_a sur le même serveur que table_b? –
souhaité était une option> _ < –
Considérons un index et une contrainte NOT NULL sur b.hoh. Voir http://stackoverflow.com/questions/721556/oracle-10g-optimize-where-is-not-null – PenFold