Home » Performance » MySQL » Problem with INNODB -> BETWEEN AND + ORDER BY query
Problem with INNODB -> BETWEEN AND + ORDER BY query [message #3749] Fri, 28 November 2008 05:47 Go to next message
Juergen  is currently offline Juergen
Messages: 1
Registered: November 2008
Junior Member
Hi there,

I have a performance problem with inno.
I switched one table from MyISAM to INNODB because of transaction support:
the following query
SELECT * FROM table
WHERE artnr BETWEEN '120000' AND '130000'
AND menge IS NOT NULL
ORDER BY art ASC, p DESC


takes 0.8s to load with myisam, which is ok.
But with inno it takes 120+ sec (with heavy I/O activity).

The table contains only 500000 records. In both cases, no key is used.
But even if I add a key to artnr, the results are the same.
In my eyes this should not happen, even with no keys.

Another thing I don't understand:
MyISAM uses the index, INNODB not:
+----+-------------+-------+------+---------------+------+---------+------+--------+-----------------------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows   | Extra                       |
+----+-------------+-------+------+---------------+------+---------+------+--------+-----------------------------+
|  1 | SIMPLE      | table | ALL  | TEST          | NULL | NULL    | NULL | 533968 | Using where; Using filesort |
+----+-------------+-------+------+---------------+------+---------+------+--------+-----------------------------+


If I change '130000' to something between '120000' and '128982' (or add a force index) the key is used with INNO but the performance is still very poor.

+----+-------------+-------+-------+---------------+------+---------+------+-------+-----------------------------+
| id | select_type | table | type  | possible_keys | key  | key_len | ref  | rows  | Extra                       |
+----+-------------+-------+-------+---------------+------+---------+------+-------+-----------------------------+
|  1 | SIMPLE      | fpos  | range | TEST          | TEST | 48      | NULL | 86134 | Using where; Using filesort |
+----+-------------+-------+-------+---------------+------+---------+------+-------+-----------------------------+


Does anybody know, why INNODB is so slow with this query?
I mean, maybe I can add a lookup myisam table or add an efficient index, but I don't understand what is happening in the background. I even could export all data manually to a csv file, sort the result with excel and reimport it to the database in less time (The "SELECT * FROM TABLE" statement takes 2 second to dump all data).

Oh, I forgot: The table:
CREATE TABLE `tableX` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `art` int(11) unsigned NOT NULL default '0',
  `p` int(11) unsigned NOT NULL default '0',
  `artnr` varchar(6) character set latin1 default NULL,
  `name` varchar(45) character set latin1 default NULL,
  ...,
  PRIMARY KEY  USING BTREE (`id`),
  KEY `TEST` USING BTREE (`artnr`)
) ENGINE=InnoDB/MyISAM

Server = 5.1
Re: Problem with INNODB -> BETWEEN AND + ORDER BY query [message #4139 is a reply to message #3749 ] Sat, 21 March 2009 21:14 Go to previous message
MarkRose  is currently offline MarkRose
Messages: 94
Registered: January 2008
Member
Try

SELECT * FROM table
WHERE artnr > '120000' AND artnr < '130000'
AND menge IS NOT NULL
ORDER BY art ASC, p DESC


?
Previous Topic:key_buffer_size question
Next Topic:Avoided filesort, but more rows to exmaine, need advice!
Goto Forum:
  


Current Time: Thu Jul 9 22:32:24 EDT 2009

Total time taken to generate the page: 0.00568 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 2.7.7.
Copyright ©2001-2007 FUD Forum Bulletin Board Software

MySQL is a trademark of Sun Microsystems.
InnoDB is a trademark of Oracle Corp.

Percona Performance Forums are a service of Percona, Inc.
Not affiliated with Sun Microsystems or Oracle Corp.