2011-09-14 5 views
2

J'ai plus d'un million d'enregistrements dans ces tables dans les deux bases de données. J'essaie de comprendre des données dans les deux bases de données de tableaux acros.Problème de performances des bases de données Oracle multiples

SELECT COUNT(*) FROM DB1.MYTABLE WHERE SEQ_NO NOT IN(SELECT SEQ_NO FROM DB2.MYTABLE) AND FILENAME NOT LIKE '%{%' 
and PT_TYPE NOT IN(15,24,268,284,285,286,12,17,9,290,214,73) AND STTS=1 

La requête prend des âges. Y a-t-il un moyen de le faire rapidement?

apprécie votre aide à l'avance

Répondre

2

Voulez-vous dire en fait différentes bases de données? Ou voulez-vous dire différents schémas? Vous parlez de différentes bases de données mais la syntaxe semble utiliser des tables dans deux schémas différents, et non deux bases de données différentes. Je ne vois aucune référence à un lien de base de données qui serait nécessaire s'il y avait deux bases de données différentes, mais peut-être DB2.MYTABLE est censé être un synonyme de [email protected].

Il serait utile de pouvoir publier le plan de requête généré. Il serait également utile d'indiquer quels indices existent et quelle est la sélectivité de chacun de ces prédicats. Je pense que la modification de la requête à

SELECT count(*) 
    FROM schema1.mytable a 
WHERE NOT EXISTS (
    SELECT 1 
     FROM schema2.mytable b 
    WHERE a.seq_no = b.seq_no) 
    AND a.filename NOT LIKE '%{%' 
    AND a.pt_type NOT IN (15,24,268,284,285,286,12,17,9,290,214,73) 
    AND a.stts = 1 

pourrait être plus efficace si la plupart des lignes de SCHEMA1.MYTABLE sont éliminés parce que le SEQ_NO existe dans SCHEMA2.MYTABLE.

Questions connexes