Subject | Re: Firebird 2.1.3 optimizer in does not use index - Email found in subject |
---|---|
Author | Andreas Rulle |
Post date | 2010-07-20T12:39:24Z |
Hello Sean,
thank you for your hints!
They have motivated us to create a fresh database with a Firebird 2.1.3 server.
And then the following statements have then been executed:
a) The two tables:
create table T1 (s1 integer, s2 varchar(50));
create table T2 (s1 integer, s2 varchar(50));
b) A really small data set
insert into T1 values(1,'Wert 1');
insert into T1 values(2,'Wert 2');
insert into T1 values(3,'Wert 3');
insert into T2 values(1,'Wert 1');
insert into T2 values(2,'Wert 2');
insert into T2 values(3,'Wert 3');
c) The indices
create unique index IDX_T11 on T1 (s1);
create unique index IDX_T12 on T2 (s1);
d) A left join
select t1.s1 from t1 left join t2 on t1.s1=t2.s1
FlameFobin reports that the following plan has been used:
PLAN JOIN (T1 NATURAL, T2 INDEX (IDX_T12))
Yes, the optimizer takes the second index, but not the first one.
e) A left join with a plan
An attempt to suggest the usage of the index of the first table as well
select t1.s1 from t1 left join t2 on t1.s1=t2.s1 PLAN JOIN (T1 INDEX (IDX_T11),T2 INDEX (IDX_T12))
fails with
Greetings
Andreas
thank you for your hints!
They have motivated us to create a fresh database with a Firebird 2.1.3 server.
And then the following statements have then been executed:
a) The two tables:
create table T1 (s1 integer, s2 varchar(50));
create table T2 (s1 integer, s2 varchar(50));
b) A really small data set
insert into T1 values(1,'Wert 1');
insert into T1 values(2,'Wert 2');
insert into T1 values(3,'Wert 3');
insert into T2 values(1,'Wert 1');
insert into T2 values(2,'Wert 2');
insert into T2 values(3,'Wert 3');
c) The indices
create unique index IDX_T11 on T1 (s1);
create unique index IDX_T12 on T2 (s1);
d) A left join
select t1.s1 from t1 left join t2 on t1.s1=t2.s1
FlameFobin reports that the following plan has been used:
PLAN JOIN (T1 NATURAL, T2 INDEX (IDX_T12))
Yes, the optimizer takes the second index, but not the first one.
e) A left join with a plan
An attempt to suggest the usage of the index of the first table as well
select t1.s1 from t1 left join t2 on t1.s1=t2.s1 PLAN JOIN (T1 INDEX (IDX_T11),T2 INDEX (IDX_T12))
fails with
>Message: isc_dsql_prepare failedDoes Firebird not use an index for "the left table" of a left outer join?
>SQL Message : -284
>index @1 cannot be used in the specified plan
>Engine Code : 335544642
>Engine Message :
>index @1 cannot be used in the specified plan
Greetings
Andreas