Я хочу избежать TABLE ACCESS FULL в плане выполнения, но он не работает, даже когда я принудительно использую index / * index () * / в этом запросе:
SELECT
af.ID, af.nom_flux, st.chemin_stockage, af.hash_flux
FROM
stockage st
INNER JOIN
allotissement_flux af ON EXISTS (SELECT *
FROM signature sig
WHERE st.id_flux = sig.id_flux
AND af.ID = sig.id_flux
AND sig.statut_signature = 'SIGNE'
AND sig.nb_appel_service_signature < 4
AND sig.date_statut_signature >= sysdate - 1000)
WHERE
st.statut_stockage = 'OUI'
AND st.date_statut_stockage >= sysdate - 1000
Индекс создается на каждый атрибут таблиц.
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)