Jack

you must have a compound index in your table:

  ALTER Table ifInOctets_137 add INDEX i_id_dtime(id,dtime);

In your SELECT statement, change
   "USE INDEX (dtime)"
to
   "USE INDEX (i_id_dtime)"

Let us know how it works.

David

> -----Original Message-----
> From: Jack Coxen [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, March 24, 2004 11:51 AM
> To: '[EMAIL PROTECTED]'; MySQL List (E-mail)
> Subject: RE: Index not functioning
> 
> 
> I tried using 'USE INDEX' and 'BETWEEN' but it didn't change anything.
> 
>       EXPLAIN SELECT counter, UNIX_TIMESTAMP(dtime) FROM 
> ifInOctets_137
> USE INDEX (dtime) WHERE id=2809 AND dtime BETWEEN 
> FROM_UNIXTIME(1073970000)
> AND FROM_UNIXTIME(1076734799) ORDER BY dtime;
>       
> +----------------+------+---------------+------+---------+----
> --+---------+-
> ----------------------------+
>       | table          | type | possible_keys | key  | 
> key_len | ref  |
> rows    | Extra                       |
>       
> +----------------+------+---------------+------+---------+----
> --+---------+-
> ----------------------------+
>       | ifInOctets_137 | ALL  | dtime         | NULL |    
> NULL | NULL |
> 9279150 | Using where; Using filesort |
>       
> +----------------+------+---------------+------+---------+----
> --+---------+-
> ----------------------------+
>       1 row in set (0.00 sec)
> 
> Is my syntax wrong?   
> 
> The resultset size should be around 8640 rows - 5 minute 
> interval data for
> 30 days - 12 X 24 X 30 = 8640
> 
> -----Original Message-----
> From: Victor Pendleton [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, March 24, 2004 1:22 PM
> To: Jack Coxen; MySQL List (E-mail)
> Subject: RE: Index not functioning
> 
> 
> Optimizers work on a thirty percent rule. If the resultset 
> will contain
> thirty
> percent of the table then a table scan will be performed. If 
> you want to
> `force` the use of an index you can use the `USE INDEX 
> <index-name>` syntax.
> You also should look at your query. You have three criteria 
> in your where
> clause
> id=2809
> dtime>FROM_UNIXTIME(1073970000)
> dtime<=FROM_UNIXTIME(1076734799)
> A compound index containing id and dtime should be created.
> Can you use a BETWEEN statement?
> WHERE id = 2809 AND ( dtime BETWEEN start AND stop)
> ...
> Also what is the sum of your `>` and `<=` resultsets? This 
> value may be
> larger
> than you expect.
> 
>   On Wed, 24 Mar 2004,
> Jack Coxen wrote: > 
> > Is there a way of changing what it believes?  The resultset 
> size is only
> > a few thousand lines.  
> > 
> > And, btw, why does it believe that a table scan is more 
> efficient than
> > using an index? 
> > 
> > Jack 
> > 
> > -----Original Message----- 
> > From: Victor Pendleton [ mailto:[EMAIL PROTECTED]
> > <mailto:[EMAIL PROTECTED]> ] 
> > Sent: Wednesday, March 24, 2004 12:24 PM 
> > To: Jack Coxen; MySQL List (E-mail) 
> > Subject: Re: Index not functioning 
> > 
> > 
> > The optimizer is informing you that `it` believes a table 
> scan is more 
> > efficient than using an index due to the resultset size. 
> > 
> >  On Wed, 
> > 24 Mar 2004, Jack Coxen wrote: > 
> > > I have a series of tables that were created by: 
> > > 
> > >       CREATE TABLE ifInOctets ( 
> > >         id int(11) NOT NULL default '0', 
> > >         dtime datetime NOT NULL default '0000-00-00 00:00:00', 
> > >         counter bigint(20) NOT NULL default '0', 
> > >         KEY ifInOctets_idx (dtime) 
> > >       ); 
> > > 
> > > When I run a query against any of the tables, the index 
> isn't used.
> > The 
> > > query syntax is: 
> > > 
> > >       SELECT counter, UNIX_TIMESTAMP(dtime) FROM 
> ifInOctets_137 WHERE 
> > > id=2809 AND dtime>FROM_UNIXTIME(1073970000) AND 
> > > dtime<=FROM_UNIXTIME(1076734799) ORDER BY dtime; 
> > > 
> > > Running an EXPLAIN of that command gives: 
> > > 
> > >       
> > >
> > 
> +----------------+------+---------------+------+---------+----
> --+-------
> > 
> > > --+- 
> > > ----------------------------+ 
> > >       | table          | type | possible_keys | key  | 
> key_len | ref 
> > > | 
> > > rows    | Extra                       | 
> > >       
> > >
> > 
> +----------------+------+---------------+------+---------+----
> --+-------
> > 
> > > --+- 
> > > ----------------------------+ 
> > >       | ifInOctets_137 | ALL  | dtime         | NULL |    
> NULL | NULL 
> > > | 
> > > 9279150 | Using where; Using filesort | 
> > >       
> > >
> > 
> +----------------+------+---------------+------+---------+----
> --+-------
> > 
> > > --+- 
> > > ----------------------------+ 
> > >       1 row in set (0.00 sec) 
> > > 
> > > I'm running on a Sun E250 w/RAID running Solaris 8.  I'm 
> running MySQL
> > 
> > > 4.0.16 precompiled Solaris binary.  My my.cnf is essentially the 
> > > my-huge.cnf 
> > > file.  Other people are running this application (RTG - 
> > > http://rtg.sourceforge.net <http://rtg.sourceforge.net> ) 
> on various
> > platforms and MySQL versions and 
> > > ARE 
> > > NOT having this problem. 
> > > 
> > > I've run ANALYZE and OPTIMIZE against the tables with no 
> effect.  I've
> > 
> > > dropped the indexes and recreated them with no effect.  I've done 
> > > everything 
> > > I can think of with no effect.  I am now officially stumped. 
> > > 
> > > Does anyone have any suggestions on what is going on and 
> how I can fix
> > 
> > > it? 
> > > Any help would be greatly appreciated. 
> > > 
> > > Thanks, 
> > > 
> > > Jack 
> > > 
> > > Jack Coxen 
> > > IP Network Engineer 
> > > TelCove 
> > > 712 North Main Street 
> > > Coudersport, PA 16915 
> > > 814-260-2705 
> > > 
> > > 
> > 
> > 
> 
> ----------------------------------------
> Content-Type: text/html; name="unnamed"
> Content-Transfer-Encoding: quoted-printable
> Content-Description: 
> ----------------------------------------
> 

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

Reply via email to