The problem is that you're using a function on your indexed field, which
prevents the index from being used (I'm assuming you have an index on
stamp).

Store stamp directly as unixtime (use a time field) or if that's not an
option, add a column that does - if you want you can autofill it with a
trigger from stamp, or now() if that is appropriate.

On Fri, Jan 14, 2011 at 11:52 AM, Bruce Ferrell <bferr...@baywinds.org>wrote:

> How would you rewrite the following SQL so that is doesn't do a full
> table scan.   It does in fact do a full scan in spite of the time
> clause.  It's been
> making me nuts for months.
>
> select count(*) as count
> from alerts where (unix_timestamp(stamp) > (unix_timestamp(now()) -
> '300' ) )
> and devid = '244';
>
> Thanks in advance,
>
> Bruce
>
> P.S.
>
> I've tried it this way:
>
> select count(*) as count  from alerts where ((unix_timestamp(stamp) >
> (unix_timestamp(now()) - '300' ) )) and devid = '244';
>
> and explain always says this:
>
> +--+---------------+------+---------+------+---------+-------------+
> | id | select_type | table  | type | possible_keys | key  | key_len |
> ref  | rows    | Extra       |
>
> +----+-------------+--------+------+---------------+------+---------+------+---------+-------------+
> |  1 | SIMPLE      | alerts | ALL  | NULL          | NULL | NULL
> |NULL | 2041284 | Using where |
>
> +----+-------------+--------+------+---------------+------+---------+------+---------+-------------+
>
> And it's structured this way:
>
> | Field                    | Type    | Null  |  Key | Default
>             | Extra
> | id                        | varchar(60)    | NO   | MUL |
>            |
> | stamp                  | timestamp     | NO   | MUL |
> CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
>
>
>
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/mysql?unsub=vegiv...@tuxera.be
>
>


-- 
Bier met grenadyn
Is als mosterd by den wyn
Sy die't drinkt, is eene kwezel
Hy die't drinkt, is ras een ezel

Reply via email to