0
votes

Accès de table Rowid ne fonctionne pas dans cette requête

Je veux éviter l'accès de la table complète dans le plan d'exécution, mais cela ne fonctionne pas même lorsque je force l'index / * index () * / dans cette requête: xxx pré>

L'index est créé sur chaque attribut des tables. P>

Plan hash value: 2782848463
 
---------------------------------------------------------------------------------------------------
| Id  | Operation            | Name               | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |                    |    40M|  8376M|       |  1594K  (1)| 00:01:03 |
|*  1 |  HASH JOIN           |                    |    40M|  8376M|  4284M|  1594K  (1)| 00:01:03 |
|*  2 |   HASH JOIN          |                    |    40M|  3821M|  1505M|   543K  (1)| 00:00:22 |
|   3 |    SORT UNIQUE       |                    |    40M|  1042M|       |   146K  (1)| 00:00:06 |
|*  4 |     TABLE ACCESS FULL| SIGNATURE          |    40M|  1042M|       |   146K  (1)| 00:00:06 |
|*  5 |    TABLE ACCESS FULL | STOCKAGE           |    48M|  3322M|       |   130K  (2)| 00:00:06 |
|   6 |   TABLE ACCESS FULL  | ALLOTISSEMENT_FLUX |    49M|  5527M|       |   536K  (1)| 00:00:21 |
---------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   1 - access("AF"."ID"="SIG"."ID_FLUX")
   2 - access("ST"."ID_FLUX"="SIG"."ID_FLUX")
   4 - filter("SIG"."NB_APPEL_SERVICE_SIGNATURE"<4 AND "SIG"."STATUT_SIGNATURE"='SIGNE' 
              AND "SIG"."DATE_STATUT_SIGNATURE">=SYSDATE@!-1000)
   5 - filter("ST"."STATUT_STOCKAGE"='OUI' AND "ST"."DATE_STATUT_STOCKAGE">=SYSDATE@!-1000)


1 commentaires

J'ai supprimé les balises de base de données incohérentes. Tagez uniquement avec la base de données que vous utilisez vraiment. Le code ressemble à Oracle, alors j'ai laissé ça. De plus, les échantillons de données, les résultats souhaités et une explication de la logique que vous souhaitez impliquer aideraient.


3 Réponses :


1
votes

Je commencerais par former cela comme une jointure normale : xxx

On ignore ce que les indices fonctionnent mieux, mais les éléments suivants doivent être pris en compte:

  • Signature (Statut_signature, date_statut_signature, nb_appel_service_signature, id_flux)
  • stockage (statut_stockage, date_statut_stockage, id_flux)
  • allotissement_flux (id) - vous avez probablement celui-ci déjà

0 commentaires

0
votes

Le moyen le plus simple: Utilisez le paramètre «+ contour» dans le paramètre de format DBMS_XPLAN - Il vous indiquera que la section de contour où vous pouvez prendre des conseils de contour, modifier requis et ajouter comme des allusions.

ps. Ce n'est pas une bonne idée d'utilisation existant () dans la section - CBO convertit la syntaxe ANSI à une seule syntaxe natif, de sorte que vos indices peuvent devenir invalides.


0 commentaires

1
votes

existe dans la référence ne vous donnera pas de bonnes performances.

Vous devez utiliser des conditions de jointure simples. Essayez ce qui suit: xxx


0 commentaires