Hi,

Well, as a side note, you *could* use

'2003-11-11 15:30:00' BETWEEN AcctStopTime AND AcctStartTime

but MySQL can't optimize that to use indexes.

Besides, even if it was on the same column, BETWEEN is treated exactly
the same as <= and >= so BETWEEN wouldn't help anyway (except for
legibility). :-)

Michael, I wouldn't worry about changing VARCHAR to CHAR. Instead, add
AcctStopTime to the end of the "RealmAndStart" index:

ALTER TABLE ServiceRADIUSAccounting
    DROP INDEX Realm, -- This is redundant anyway
    DROP INDEX RealmAndStart,
    ADD INDEX RealmAndStartAndStop (Realm, AcctStartTime, AcctStopTime);

Then it won't need the random seeks to the data file (EXPLAIN should say
"Using index"). Might make it fast enough that you can go back to
MyISAM. :-)

Hope that helps.


Matt


----- Original Message -----
From: "Mike Johnson"
Sent: Tuesday, November 11, 2003 4:17 PM
Subject: RE: Dirt Slow Query On Datetime Range


From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]

> Change your query to use BETWEEN rather that <= and >=.
>
> --ja

<snip>

> > And here is the query:
> >
> > SELECT COUNT(*) AS CallCount FROM ServiceRADIUSAccounting
> WHERE (Realm =
> > 'testreal.com') AND (AcctStartTime <= '2003-11-11 15:30:00'
> AND AcctStopTime
> > >= '2003-11-11 15:30:00')


His WHERE clause is on two different fields (AcctStartTime and
AcctStopTime). I don't think a BETWEEN clause is what's needed...


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

Reply via email to