Subject | Re: Compound Index |
---|---|
Author | pokka_chi |
Post date | 2007-05-03T05:45:47Z |
--- In firebird-support@yahoogroups.com, "Adam" <s3057043@...> wrote:
Thanks for trying it in your machine. How about the RowsAffected
statistics in your case? It seems puzzling to me that the number of
rows affected is equal to the number of rows with Column1 > 100.
Seems that it scanned the whole 89901 records.
for testing.
dig out all the records before return the first 10 records in natural
order. That's why I tried again with the order clause.
By the way, I even thought of the possibility that it might be the
FIRST clause that caused the problem. So I wrote a simple program in
Delphi with dbexpress/ibexpress to simple open the query "select *
from My_Table where Column1 > 100 order by Column1, Column2". The
time is now 4 seconds. This is much better than 28 seconds but it is
still much higher because I expect it to be sub-second if it can
choose the right index.
PK
>Dear Adam,
> Firebird 1.5 (iSQL set stats)
>
> Reads = 45
> Writes 0
> Fetches = 391
>
> My Plan was PLAN (TMP ORDER IXTMP)
>
Thanks for trying it in your machine. How about the RowsAffected
statistics in your case? It seems puzzling to me that the number of
rows affected is equal to the number of rows with Column1 > 100.
Seems that it scanned the whole 89901 records.
> I find it puzzling that your query did so many reads. I wonder ifyou
> don't have a lot of garbage in your table, and the slowness isI thought of this too. So I rebuilt the whole database from scratch
> actually the records being garbage collected as it goes? Maybe try a
> backup-restore cycle to be sure.
for testing.
>I'm using FB2.0.1.
> Also, I am not entirely convinced the plan you posted is valid. At
> least I could not get it to work with my table and index names as it
> complains about the word 'index'.
>
> By the way, the reason Ivan said you need an order by has nothing toAgree. Without the order clause, the optimizer might even need to
> do with this performance problem. It is simply that 'get me 10
> arbitrary records that meet this criteria' is not usually a useful
> piece of information. When you talk about the first 10 records, you
> normally are thinking of an ordered set of records.
dig out all the records before return the first 10 records in natural
order. That's why I tried again with the order clause.
By the way, I even thought of the possibility that it might be the
FIRST clause that caused the problem. So I wrote a simple program in
Delphi with dbexpress/ibexpress to simple open the query "select *
from My_Table where Column1 > 100 order by Column1, Column2". The
time is now 4 seconds. This is much better than 28 seconds but it is
still much higher because I expect it to be sub-second if it can
choose the right index.
PK