Hi Karl- I often use a unix timestamp value for my dates (an unsigned mediumint is adequate) and index that. However, using date/time functions in the where clause does have a significant impact on the execution times, even when the index is used and the EXPLAIN output appears the same. See example below - I have a table called 'warn' (that currently has ~26,000,000 rows) with an index on an unsigned mediumint column call unixts that reflects a unix timestamp. See the results:
select count(*) from warn where unixts between unix_timestamp('2003-07-01') and unix_timestamp('2003-07-02'); count(*) 438146 +--------+--------+---------------+--------+---------+--------+--------+---- ----+ | table | type | possible_keys | key | key_len | ref | rows | Extra | +--------+--------+---------------+--------+---------+--------+--------+---- ----+ | warn | range | unixts | unixts | 4 | [NULL] | 327512 | where used; Using index| +--------+--------+---------------+--------+---------+--------+--------+---- ----+ 1 row in set (75.41) sec --------------------------------- select count(*) from warn where unixts between 1057032000 and 1057118400; count(*) 438146 +--------+--------+---------------+--------+---------+--------+--------+---- ----+ | table | type | possible_keys | key | key_len | ref | rows | Extra | +--------+--------+---------------+--------+---------+--------+--------+---- ----+ | warn | range | unixts | unixts | 4 | [NULL] | 327514 | where used; Using index| +--------+--------+---------------+--------+---------+--------+--------+---- ----+ 1 row in set (2.19) sec As you can see, same plan but a major difference in execution time (over an order of magnitude). Moral - be cautious using functions in your where clause - you might get surprised. Best of luck, Rick -----Original Message----- From: Karl J. Stubsjoen [mailto:[EMAIL PROTECTED] Sent: Tuesday, July 01, 2003 12:25 PM To: [EMAIL PROTECTED] Subject: Date query optimization Hi folks, I do a considerable amount of queries based on a date, and or date range. I have not had much luck with optimizing these queries. In some cases I use a date field and others a datetime field. The following query searches through 34,000 + records, while specifiying the exact date searches through 9 records. 'ROWS: 9 SEARCHED explain select a.submitid,a.url,a.submitdate,a.name,a.company,a.address1,a.city,a.state,a.z ipcode,a.country,a.email,a.phone,a.keywords,a.title,a.description,a.submitte dby from submit as a inner join re_idx as b on a.submitid = b.submitid where a.submitdate = '2003-07-01'; ROWS: 34,000 + searched explain select a.submitid,a.url,a.submitdate,a.name,a.company,a.address1,a.city,a.state,a.z ipcode,a.country,a.email,a.phone,a.keywords,a.title,a.description,a.submitte dby from submit as a inner join re_idx as b on a.submitid = b.submitid where year(a.submitdate)=2003 and month(a.submitdate)=7 and dayofmonth(a.submitdate)=1; --and year(a.submitdate)=2003 and month(a.submitdate)=7 and dayofmonth(a.submitdate)<15; Notice the 2nd where statement, this is how I typically do my date queries (and it is slow). This is because I might also be searching for a range of dates (as in the commented out "and" clause above). Is the to_days function faster than these date functions, or have any effect whatsoever? Thanks for the help. Karl -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]