Should work fine.  Quick test from a large sales test table (1.9
million rows):
mysql> select count(*) from sali;
+----------+
| count(*) |
+----------+
|  1983026 |
+----------+
1 row in set (0.00 sec)

mysql> select salidate,sum(saliQtySold) from sali where salidate >
DATE_SUB(CURRENT_DATE, INTERVAL 60 DAY) group by to_days(salidate);
+---------------------+------------------+
| salidate            | sum(saliQtySold) |
+---------------------+------------------+
| 2004-03-17 13:44:37 |                2 |
| 2004-03-24 14:40:33 |                2 |
+---------------------+------------------+
2 rows in set (0.00 sec)

mysql> explain select salidate,sum(saliQtySold) from sali where
salidate > DATE_SUB(CURRENT_DATE, INTERVAL 60 DAY) group by
to_days(salidate);
+-------+-------+---------------+----------+---------+------+------+--
--------------------------------------------+
| table | type  | possible_keys | key      | key_len | ref  | rows |
Extra                                        |
+-------+-------+---------------+----------+---------+------+------+--
--------------------------------------------+
| sali  | range | saliDate      | saliDate |       8 | NULL |   70 |
Using where; Using temporary; Using filesort |
+-------+-------+---------------+----------+---------+------+------+--
--------------------------------------------+
1 row in set (0.00 sec)

mysql>


----- Original Message ----- 
From: "Jeremy Zawodny" <[EMAIL PROTECTED]>
To: "Pete McNeil" <[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>
Sent: Wednesday, May 05, 2004 3:00 PM
Subject: Re: Range query on datetime with index - any optimization?


> On Wed, May 05, 2004 at 10:53:13AM -0400, Pete McNeil wrote:
> > Hello folks,
> >
> > I'm usinng MySQL 4.0.17.
> >
> > I have a table something like:
> >
> > RuleID int,
> > GMTBase datetime,
> > Credited bigint,
> > ...
> >
> > I have an index built on GMTBase.
> > I have rougly 8 million rows.
> >
> > GMTBase stores a datetime for the top of the hour on a given date.
> >
> > I want to build a summary of the last 2 days without scanning
every record.
> >
> > It appears that there is no way to get MySQL to use the index on
GMTBase to
> > avoid scanning all 8 million rows. I estimate it should only scan
about
> > 267K rows. Explain mentions the GMTBase index but says it will
examine
> > about a million rows. That seems to roughly match my estimate of
the number
> > of distinct GMTBase values.
> >
> > The query I want to run is:
> >
> > select RuleID, GMTBase, sum(Credited)
> > from RuleHistograms
> > where GMTBase > DATE_SUB(CURRENT_DATE, INTERVAL 2 DAY)
> > group by GMTBase
> >
> > Have I done something wrong or is there simply no way to avoid
scanning all
> > of those records?
>
> *Something* is wrong.  I'm virtually certain I've done this sort of
> thing before without having MySQL perform full table scans.  I can't
> tell what it is off the top of my head, but it should be that bad.
>
> Jeremy
> -- 
> Jeremy D. Zawodny     |  Perl, Web, MySQL, Linux Magazine, Yahoo!
> <[EMAIL PROTECTED]>  |  http://jeremy.zawodny.com/
>
> [book] High Performance MySQL -- http://highperformancemysql.com/
>
> -- 
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:
http://lists.mysql.com/[EMAIL PROTECTED]
>
>


-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to