RE: const cast ?

From: Michael Ansley <Michael(dot)Ansley(at)intec-telecom-systems(dot)com>
To: "'doj(at)wwws2(dot)redaex(dot)de'" <doj(at)wwws2(dot)redaex(dot)de>, PostgreSQL-SQL <pgsql-sql(at)postgresql(dot)org>
Subject: RE: const cast ?
Date: 2001-02-02 13:02:05
Message-ID: 7F124BC48D56D411812500D0B747251480F3BF@FILESERVER002
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

The problem is that there is no way of determining whether or not the sort
order after the function has been executed will be the same as the sort
order on the raw data. For example, the sort order of n (-10..10) is very
different to the sort order of abs(n). So if I had an index on n, I could
not use it for searching for abs(n).

So, if you always require the same function, you create a function index:

CREATE INDEX xxx ON t (date_part('year', i::date));

Just remember, if you change function, it will switch back to sequential
scan, until you create a function index for the new function that you need
to use.

Cheers...

MikeA

-----Original Message-----
From: doj(at)wwws2(dot)redaex(dot)de [mailto:doj(at)wwws2(dot)redaex(dot)de]
Sent: 02 February 2001 13:22
To: PostgreSQL-SQL
Subject: [SQL] const cast ?

Hello Postgres Users and Developers,

I have the following scenario:
create table t (i int);
create index ti on t(i);

Now this table is filled with some values and the table is vacuum analyzed.

Now I would like to run queries on this table which should use the index
whenever possible, so they execute fast.

If I try a simple query like: "select * from t where i=4" the index is used.
A query like: "select * from t where i=abs(4)" is using the index too.
But if I use more complex functions like the following:
"select * from t where i=date_part('year', '2001-01-01'::date)"
a sequential scan on the table is performed.

Now I conclude that the planner/optimizer does not recognize that the
date_part() function returns the same value upon each execution.

What I would like to know: Could we use some const-cast, so the optimzer
gets
a hint in optimizing the query ?
I think of something like:
"select * from t where i=date_part('year', '2001-01-01'::date)::const"

Would this be hard to implement, or are there any theoretical issues which
permit this. My thoughts are, that if the user declares something as const,
although it might not always be const, the database should not worry about
the complete truth and just assume the statement as const.

Or Is this feature available already, and I have just missed the correct
keyword?

--
--
---> doj(at)redaex(dot)de

**********************************************************************
This email and any files transmitted with it are confidential and
intended solely for the use of the individual or entity to whom they
are addressed. If you have received this email in error please notify
Nick West - Global Infrastructure Manager.

This footnote also confirms that this email message has been swept by
MIMEsweeper for the presence of computer viruses.

www.mimesweeper.com
**********************************************************************

Browse pgsql-sql by date

  From Date Subject
Next Message doj 2001-02-02 13:22:13 const cast ?
Previous Message Jens Hartwig 2001-02-02 10:20:31 Tuple is too big ...