RE: Index not functioning - update

2004-03-29 Thread Jack Coxen
A quick update on this.

I tried upgrading to the latest production MySQL - 4.0.18 - with no change.
So, if it's a bug, it's an unreported and uncorrected bug.

Also,  I tried the query against different size tables.  If I try the query
against ifInOctets_35, the index works.  If I try it against ifInOctets_83,
the index doesn't work.  The files differ as follows:

TABLE NAME  ROWSFILE SIZE   INDEX WORKED?
ifInOctets_35   41240   865977  Yes
ifInOctets_83   41923   880362  No

I have no idea what (if anything) this means but the query works
consistently on tables smaller than ifInOctets_35 and consistently doesn't
work on tables larger than ifInOctets_83 - at least so far.

I know that a compound index of id and dtime would fix the problem but it
would also leave me with a non-standard installation.  I'll do that if I
have to but I'd prefer to fix the existing setup of a single index on dtime.

Jack

-Original Message-
From: Jack Coxen [mailto:[EMAIL PROTECTED]
Sent: Wednesday, March 24, 2004 1:51 PM
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(107397)
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
dtimeFROM_UNIXTIME(107397)
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 '-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 dtimeFROM_UNIXTIME(107397) 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

RE: Index not functioning - update

2004-03-29 Thread dan
just out of curiousity,
have you tried the 4.1.1 version?

there may (or may not) be something from 4.1.0 to 4.1.1
could be a total waste of time, but you never know.

Dan.

On Mon, 29 Mar 2004, Jack Coxen wrote:

 A quick update on this.
 
 I tried upgrading to the latest production MySQL - 4.0.18 - with no change.
 So, if it's a bug, it's an unreported and uncorrected bug.
 
 Also,  I tried the query against different size tables.  If I try the query
 against ifInOctets_35, the index works.  If I try it against ifInOctets_83,
 the index doesn't work.  The files differ as follows:
 
 TABLE NAMEROWSFILE SIZE   INDEX WORKED?
 ifInOctets_35 41240   865977  Yes
 ifInOctets_83 41923   880362  No
 
 I have no idea what (if anything) this means but the query works
 consistently on tables smaller than ifInOctets_35 and consistently doesn't
 work on tables larger than ifInOctets_83 - at least so far.
 
 I know that a compound index of id and dtime would fix the problem but it
 would also leave me with a non-standard installation.  I'll do that if I
 have to but I'd prefer to fix the existing setup of a single index on dtime.
 
 Jack
 
 -Original Message-
 From: Jack Coxen [mailto:[EMAIL PROTECTED]
 Sent: Wednesday, March 24, 2004 1:51 PM
 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(107397)
 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
 dtimeFROM_UNIXTIME(107397)
 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 '-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 dtimeFROM_UNIXTIME(107397) 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

RE: Index not functioning - update

2004-03-29 Thread Jack Coxen
No, this is a production system.  I can't risk running non-production level
software.

I could try 4.1.1 on my development system but, even if it worked, I still
couldn't put that solution into place on the production server.

Jack

-Original Message-
From: dan [mailto:[EMAIL PROTECTED]
Sent: Monday, March 29, 2004 12:24 PM
To: Jack Coxen
Cc: '[EMAIL PROTECTED]'; MySQL List (E-mail)
Subject: RE: Index not functioning - update


just out of curiousity,
have you tried the 4.1.1 version?

there may (or may not) be something from 4.1.0 to 4.1.1
could be a total waste of time, but you never know.

Dan.

On Mon, 29 Mar 2004, Jack Coxen wrote:

 A quick update on this.
 
 I tried upgrading to the latest production MySQL - 4.0.18 - with no
change.
 So, if it's a bug, it's an unreported and uncorrected bug.
 
 Also,  I tried the query against different size tables.  If I try the
query
 against ifInOctets_35, the index works.  If I try it against
ifInOctets_83,
 the index doesn't work.  The files differ as follows:
 
 TABLE NAMEROWSFILE SIZE   INDEX WORKED?
 ifInOctets_35 41240   865977  Yes
 ifInOctets_83 41923   880362  No
 
 I have no idea what (if anything) this means but the query works
 consistently on tables smaller than ifInOctets_35 and consistently doesn't
 work on tables larger than ifInOctets_83 - at least so far.
 
 I know that a compound index of id and dtime would fix the problem but it
 would also leave me with a non-standard installation.  I'll do that if I
 have to but I'd prefer to fix the existing setup of a single index on
dtime.
 
 Jack
 
 -Original Message-
 From: Jack Coxen [mailto:[EMAIL PROTECTED]
 Sent: Wednesday, March 24, 2004 1:51 PM
 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(107397)
 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
 dtimeFROM_UNIXTIME(107397)
 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 '-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 dtimeFROM_UNIXTIME(107397) AND 
   dtime=FROM_UNIXTIME(1076734799) ORDER BY dtime; 
   
   Running an EXPLAIN

Re: Index not functioning

2004-03-24 Thread Victor Pendleton
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 '-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 dtimeFROM_UNIXTIME(107397) 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) 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
 
 

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



RE: Index not functioning

2004-03-24 Thread Jack Coxen
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]
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 '-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 dtimeFROM_UNIXTIME(107397) 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) 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
 
 


RE: Index not functioning

2004-03-24 Thread Victor Pendleton
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
dtimeFROM_UNIXTIME(107397)
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 '-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 dtimeFROM_UNIXTIME(107397) 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]



RE: Index not functioning

2004-03-24 Thread Jack Coxen
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(107397)
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
dtimeFROM_UNIXTIME(107397)
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 '-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 dtimeFROM_UNIXTIME(107397) 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: 



RE: Index not functioning

2004-03-24 Thread Lopez David E-r9374c
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(107397)
 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
 dtimeFROM_UNIXTIME(107397)
 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 '-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 dtimeFROM_UNIXTIME(107397) 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