I'm using Oracle Database "Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 64bit"
I'm facing a behavior I don't know if its right or there is something wrong with that.
for example the below query
SELECT *
FROM (SELECT x, y, z, ROW_NUMBER() OVER (PARTITION BY x ORDER BY last_date DESC) ROW1
FROM HHH
WHERE s = 0
AND v_Date <= TO_DATE('20191110','YYYYMMDD')
AND t_Date >= TO_DATE('20191110','YYYYMMDD')
WHERE ROW1 = 1
I created an Index on as below:
CREATE INDEX IDX_HHH_S_V_T_DATE ON HHH (S, v_date desc, t_date desc) compute statistics
The optimizer always choose this index, but when I mentioned "Parallel" hint:
SELECT *
FROM (SELECT /*+ PARALLEL(8) */ x, y, z, ROW_NUMBER() OVER (PARTITION BY x ORDER BY last_date DESC) ROW1
FROM HHH
WHERE s = 0
AND v_Date <= TO_DATE('20191110','YYYYMMDD')
AND t_Date >= TO_DATE('20191110','YYYYMMDD')
WHERE ROW1 = 1
The optimizer choose to skip this index.
Solutions I tried and still the same:
- I altered the table to parallel 8
- I altered the index to parallel 8
When trying to force the optimizer to use the index using "INDEX" hint:
SELECT *
FROM (SELECT /*+ PARALLEL(8) INDEX(HHH (IDX_HHH_S_V_T_DATE))*/ x, y, z, ROW_NUMBER() OVER (PARTITION BY x ORDER BY last_date DESC) ROW1
FROM HHH
WHERE s = 0
AND v_Date <= TO_DATE('20191110','YYYYMMDD')
AND t_Date >= TO_DATE('20191110','YYYYMMDD')
WHERE ROW1 = 1