Subject | RE: [firebird-support] Query optimization mystery |
---|---|
Author | Leyne, Sean |
Post date | 2014-05-13T21:33:21Z |
> This doesn't quite execute. I cleaned it up to this:Do not use SQL 87 JOIN syntax:
>
> select * from (
> select a.User_ID, a.ADVOCATE_CODE
> from Advocate a
> where a.USER_ID=37
> ) as FILTER1,supprog sp
> Where sp.ADVOCATE_CODE=FILTER1.Advocate_Code
>
> It gets the same plan: "PLAN JOIN (SP NATURAL, FILTER1 A INDEX
> (ADVOCATE_))". But it has another problem, too: ultimately I'm wanting to
> use this as part of a view, so I can't do my filtering inside the query.
) as FILTER1,supprog sp
It is very lazy and leave the relationships between the tables too undefined.
Always use explicit JOIN.
Like this:
select sp.STUDENTSEQ, Filter1.User_ID
from (
select a.User_ID, a.ADVOCATE_CODE
from Advocate a
where a.USER_ID=37
) as FILTER1
JOIN supprog sp ON sp.ADVOCATE_CODE=FILTER1.Advocate_Code
Questions:
1- What indexes do you have defined on a.User_ID?
2- What is the selectivity (aka uniqueness) of User_ID and Advocate_Code?
3- Is searching by User_ID and Advocate_Code a common query?
Sean