For some strange reason, all HEAP table indexes only process WHERE clauses
with = and <=> operators ONLY. There's nothing you can do about it. I'm
pretty sure of that because I remember the MySQL mentions something like
this about HEAP tables.

-----Original Message-----
From: Jeff S Wheeler [mailto:[EMAIL PROTECTED]]
Sent: March 8, 2001 9:11 PM
To: [EMAIL PROTECTED]
Subject: indexes on TEMPORARY HEAP tables ignored in ORDER BY / GROUP BY


Hi, I'm not subscribed to the list so please CC: me on replies.

Why are indexes on TEMPORARY tables created with TYPE=HEAP ignored when
doing a query involving ORDER BY or GROUP BY?  These indexes are used in
some selects involving a WHERE clause, so obviously the index isn't
completely worthless.  Why is it not used in cases when the index would be
used if it were an on-disk table?

My disk subsystem is not fast enough to do these queries efficiently, but I
do have enough memory to create the temp table with TYPE=HEAP.  But, it
would improve performance signifigantly if indexes were not ignored.  I know
this because if I do create a disk table and then query against it while it
is in os-disk-cache, the queries are actually faster than the TYPE=HEAP
table, because mysql will use the index effectively.

Thanks, SQL statements and .sig to follow.



mysql> CREATE TEMPORARY TABLE t2 (CallCount INT NOT NULL, BTN CHAR(24) NOT
NULL) TYPE=HEAP;
Query OK, 0 rows affected (0.00 sec)


mysql> INSERT INTO t2 SELECT COUNT(*) AS CallCount, BillN AS BTN FROM Call
GROUP BY BillN;
Query OK, 5617334 rows affected (40.50 sec)


mysql> CREATE INDEX CallCount ON t2 (CallCount);
Query OK, 5617334 rows affected (13.76 sec)


mysql> EXPLAIN SELECT * FROM t2 USE INDEX (CallCount) ORDER BY CallCount
DESC LIMIT 10;
+-------+------+---------------+------+---------+------+---------+----------
------+
| table | type | possible_keys | key  | key_len | ref  | rows    | Extra
|
+-------+------+---------------+------+---------+------+---------+----------
------+
| t2    | ALL  | NULL          | NULL |    NULL | NULL | 5617334 | Using
filesort |
+-------+------+---------------+------+---------+------+---------+----------
------+
1 row in set (0.00 sec)

mysql> SHOW INDEX FROM t2;
+-------+------------+-----------+--------------+-------------+-----------+-
------------+----------+--------+---------+
| Table | Non_unique | Key_name  | Seq_in_index | Column_name | Collation |
Cardinality | Sub_part | Packed | Comment |
+-------+------------+-----------+--------------+-------------+-----------+-
------------+----------+--------+---------+
| t2    |          1 | CallCount |            1 | CallCount   | NULL      |
NULL |     NULL | NULL   |         |
+-------+------------+-----------+--------------+-------------+-----------+-
------------+----------+--------+---------+
1 row in set (0.00 sec)

mysql> EXPLAIN SELECT * FROM t2 WHERE CallCount=10;
+-------+------+---------------+-----------+---------+-------+------+-------
-----+
| table | type | possible_keys | key       | key_len | ref   | rows | Extra
|
+-------+------+---------------+-----------+---------+-------+------+-------
-----+
| t2    | ref  | CallCount     | CallCount |       4 | const |   10 | where
used |
+-------+------+---------------+-----------+---------+-------+------+-------
-----+
1 row in set (0.00 sec)


---
Jeff S Wheeler           [EMAIL PROTECTED]
Software Development        Five Elements, Inc
http://www.five-elements.com/~jsw/



---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to