Thread: Index called with Union but not with OR clause
Hi All,
I have a select statement
select * from v_func_actual_costs
where parent_project='10478' or proj_pk = '10478'
where parent_project='10478' or proj_pk = '10478'
both the fields parent_project and proj_pk have indexes based on them, but when I ran explain plan on this statement I found that none of the indexes are being called. But, if I make two separate statement and combine them with Union ALL, the indexes are being called. The select statement in this case is
select * from ct_admin.v_func_actual_costs
where parent_project='10478'
union all
select * from ct_admin.v_func_actual_costs
where proj_pk = '10478'
where parent_project='10478'
union all
select * from ct_admin.v_func_actual_costs
where proj_pk = '10478'
Can anybody help me to find a reason for the same. This is just a part of the query so I cannot use the Union ALL clause.
Thanks in advance
Chitra
This discussion really belongs on the performance list and I am copying that list with mail-followup-to set. On Fri, Feb 20, 2004 at 12:26:22 +0530, V Chitra <vchitra@techbooks.com> wrote: > Hi All, > > I have a select statement > > select * from v_func_actual_costs > where parent_project='10478' or proj_pk = '10478' > > both the fields parent_project and proj_pk have indexes based on them, but when I ran explain plan on this statement Ifound that none of the indexes are being called. But, if I make two separate statement and combine them with Union ALL,the indexes are being called. The select statement in this case is > > select * from ct_admin.v_func_actual_costs > where parent_project='10478' > union all > select * from ct_admin.v_func_actual_costs > where proj_pk = '10478' > > Can anybody help me to find a reason for the same. This is just a part of the query so I cannot use the Union ALL clause. Have you analyzed the databases recently? Can you supply explain analyze output for the queries? It isn't necessarily faster to use two index scans instead of one sequential scan depending on the fraction of the table being returned and some other factors. If the planner is making the wrong choice in your case, you need to supply the list with more information to get help figuring out why the wrong choice is being made.