Why there are both filter and access predicates on the same index on this execution plan?

Viewed 42

Considering the execution plan for this query :

SQL_ID  1m5r644say02b, child number 0
-------------------------------------
select * from hr.employees where department_id = 80 intersect select * 
from hr.employees where first_name like 'A%'
 
Plan hash value: 1738366820
 
------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                             | Name        | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                      |             |      1 |        |      4 |00:00:00.01 |       8 |       |       |          |
|   1 |  INTERSECTION                         |             |      1 |        |      4 |00:00:00.01 |       8 |       |       |          |
|   2 |   SORT UNIQUE                         |             |      1 |     34 |     34 |00:00:00.01 |       6 |  6144 |  6144 | 6144  (0)|
|*  3 |    TABLE ACCESS FULL                  | EMPLOYEES   |      1 |     34 |     34 |00:00:00.01 |       6 |       |       |          |
|   4 |   SORT UNIQUE                         |             |      1 |     11 |     10 |00:00:00.01 |       2 |  2048 |  2048 | 2048  (0)|
|   5 |    TABLE ACCESS BY INDEX ROWID BATCHED| EMPLOYEES   |      1 |     11 |     10 |00:00:00.01 |       2 |       |       |          |
|*  6 |     INDEX SKIP SCAN                   | EMP_NAME_IX |      1 |     11 |     10 |00:00:00.01 |       1 |       |       |          |
------------------------------------------------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   3 - filter("DEPARTMENT_ID"=80)
   6 - access("FIRST_NAME" LIKE 'A%')
       filter("FIRST_NAME" LIKE 'A%')

The execution plan has both access and filter predicates with the same '%A' predicate here on the EMP_NAME_IX index. But shouldn't the access predicate be enough here, as they both will filter the same rows? Why did it perform the additional filter predicate?

0 Answers
Related