Thread: Index called with Union but not with OR clause

Index called with Union but not with OR clause

From
"V Chitra"
Date:
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 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'
 
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

Re: Index called with Union but not with OR clause

From
Bruno Wolff III
Date:
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.