Wes, 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 >=3D "03-AUG-04 = 00:00:00" and <=3D "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@xxxxxxxxx] Sent: Tuesday, August 03, 2004 11:54 AM To: oracle-l@xxxxxxxxxxxxx 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=20 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; These two SQL statements gave the error: ORA-00932: inconsistent datatypes If I try this one, it works. SELECT TRUNC(SYSDATE - 22), TO_DATE(TO_CHAR(TRUNC(SYSDATE-22+1), = 'DD-MON-YYYY HH24:MI:SS'), 'DD-MON-YYYY HH24:MI:SS') from dual; Is there any way to improve this lengthly statement? Thanks, Wes --- Edgar Chupit <edgar.chupit@xxxxx> wrote: > Hello Wes, >=20 > WB> WHERE TRUNC(last_update_date) =3D 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)? >=20 > 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) >=20 > 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@xxxxxxxxxxxxx put 'unsubscribe' in the subject line. -- Archives are at //www.freelists.org/archives/oracle-l/ FAQ is at //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@xxxxxxxxxxxxx put 'unsubscribe' in the subject line. -- Archives are at //www.freelists.org/archives/oracle-l/ FAQ is at //www.freelists.org/help/fom-serve/cache/1.html -----------------------------------------------------------------