Yes, it is an indexed field:
mysql> explain select count(*) from hitstats where year(apacheDate) = 2003 and
    -> month(apacheDate) = 9;
+----+-------------+----------+-------+---------------+-----------+---------+------+---------+--------------------------+
| id | select_type | table    | type  | possible_keys | key       | key_len | ref  | 
rows    | Extra                    |
+----+-------------+----------+-------+---------------+-----------+---------+------+---------+--------------------------+
|  1 | SIMPLE      | hitstats | index | NULL          | dateIndex |       8 | NULL | 
2749862 | Using where; Using index |
+----+-------------+----------+-------+---------------+-----------+---------+------+---------+--------------------------+
1 row in set (0.00 sec)

Using between is much faster(?!)  Still though, the query is slow when I add antoher 
part in, such as:
mysql> select count(*) from hitstats where url like '/water/index.html' AND ApacheDate 
between '2003-09-01' and '2003-10-01';
+----------+
| count(*) |
+----------+
|     2396 |
+----------+
1 row in set (14.68 sec)

mysql> explain select count(*) from hitstats where url like '/water/index.html' AND 
ApacheDate between '2003-09-01' and '2003-10-01';
+----+-------------+----------+-------+--------------------+----------+---------+------+------+-------------+
| id | select_type | table    | type  | possible_keys      | key      | key_len | ref  
| rows | Extra       |
+----+-------------+----------+-------+--------------------+----------+---------+------+------+-------------+
|  1 | SIMPLE      | hitstats | range | urlIndex,dateIndex | urlIndex |     255 | NULL 
| 5368 | Using where |
+----+-------------+----------+-------+--------------------+----------+---------+------+------+-------------+
1 row in set (0.00 sec)


I have two indexes, would it be better if I did the two fields in one index?

--ja
On Tue, 4 Nov 2003, Brent Baisley wrote:

> You're searching on a calculation so I'm pretty sure that MySQL is not 
> using an index for the search. You should use explain in front of your 
> query to see if MySQL is using indexes. You do have that date field 
> indexed, don't you?
> You should search on ApacheDate between 9/1/2003 and 10/1/2003.
> 
> Something like this:
> select count(*) from hitstats where apacheData between '2003-09-01' and 
> '2003-10-01';
> 
> I think that's right. The 'between' is not inclusive of the second 
> parameter.
> 
> On Tuesday, November 4, 2003, at 05:09 PM, <[EMAIL PROTECTED]> wrote:
> 
> > When I try to do any sort of query the times are really long.  Such as:
> >
> > mysql> select count(*) from hitstats where year(apacheDate) = 2003 and
> > month(apacheDate) = 9;                               +----------+
> > | count(*) |
> > +----------+
> > |   988759 |
> > +----------+
> > 1 row in set (25.17 sec)
> >
> 

-- 


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

Reply via email to