Dates are "funny " data types. They contain both the date & time which is where your getting messed up. Trunc(sysdate) returns the sysdate, but with time zeroed out or "04-AUG-04 00:00:00 ". Trunc(sysdate)-22/86400 is returning the truncated date with 22 seconds subtracted or "03-AUG-04 23:59:38 ". Now using trunc(last_update_date) in your where clause is crippling your index, therefore using the "last_update_date between trunc(sysdate-1) and trunc(sysdate) " is better since you don 't have to apply a function to your data one row at a time. Your asking Oracle to determine if the date is >= "03-AUG-04 00:00:00 " and <= "04-AUG-04 00:00:00 ". Dividing dates just makes no sense at all, like a divide by 0.
Dick Goulet
Senior Oracle DBA
Oracle Certified 8i DBA
-- --Original Message-- --
From: Wes Brooks [mailto:wes_brooks@(protected)]
Sent: Tuesday, August 03, 2004 11:54 AM
To: oracle-l@(protected)
Subject: Re: SQL Tunning
Hello expert,
Thank you very much for all of your reply.
But in my case, the 1 is variable. I tried the following but it complains that
SELECT TRUNC(SYSDATE)-22/86400 from dual;
TRUNC(SYS
-- ------
02-AUG-04 <--- Wrong date.
SELECT TRUNC(SYSDATE-22)/86400 from dual;
SELECT (TRUNC(SYSDATE)-22)/86400 from dual;
Is there any way to improve this lengthly statement?
Thanks,
Wes
--- Edgar Chupit <edgar.chupit@(protected) > wrote:
> Hello Wes,
>
> WB > WHERE TRUNC(last_update_date) = TRUNC(SYSDATE - 1)
> WB > How to improve the performance? Do I need to create a new index field on the table with
> TRUNC(last_update_date)?
>
> You have several opportunities:
> a) you can rewrite your query to this:
> where last_update_date between trunc(sysdate)-1 and trunc(sysdate)-1/86400
> b) you can create function based index like:
> create index tt_idx on tt(trunc(last_update_date));
> c) you can add column to your table with values from trunc(last_update_date)
>
> What option to choose mostly depends on your requirements.
-- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ------
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ------
To unsubscribe send email to: oracle-l-request@(protected)
put 'unsubscribe ' in the subject line.
--
Archives are at http://www.freelists.org/archives/oracle-l/
FAQ is at http://www.freelists.org/help/fom-serve/cache/1.html
-- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- --
-- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ------
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ------
To unsubscribe send email to: oracle-l-request@(protected)
put 'unsubscribe ' in the subject line.
--
Archives are at http://www.freelists.org/archives/oracle-l/
FAQ is at http://www.freelists.org/help/fom-serve/cache/1.html
-- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- --