Hi!
I have this table :
mysql> desc cpu;
+-----------------+----------------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+----------------------+------+-----+---------------------+-------+
| timecode | datetime | | MUL | 0000-00-00 00:00:00 | |
| systemid | smallint(5) unsigned | | | 0 | |
| usertime | float(3,1) | YES | | NULL | |
| systemtime | float(3,1) | YES | | NULL | |
| waittime | float(3,1) | YES | | NULL | |
| idletime | float(3,1) | YES | | NULL | |
| runqueue60 | float(4,2) | YES | | NULL | |
| processes | smallint(5) unsigned | YES | | NULL | |
| interrupts | float(6,1) | YES | | NULL | |
| systemcalls | float(6,1) | YES | | NULL | |
| contextswitches | float(6,1) | YES | | NULL | |
+-----------------+----------------------+------+-----+---------------------+-------+
11 rows in set (0.00 sec)
With this index :
mysql> show index from cpu;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality
|| Sub_part | Packed | Comment |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+---------+
| cpu | 1 | timecode | 1 | timecode | A | 4199933
|| NULL | NULL | |
| cpu | 1 | timecode | 2 | systemid | A | 4199933
|| NULL | NULL | |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+---------+
2 rows in set (0.13 sec)
...and I execute a query like this (here with explain first) :
mysql> explain SELECT substring_index(elisa.timecode,':',1),
avg(elisa.usertime + elisa.systemtime) AS elisa,
avg(asuncion10.usertime + asuncion10.systemtime) AS asuncion10,
FROM cpu AS elisa, cpu AS asuncion10, cpu AS asuncion20
WHERE elisa.systemid='44'
AND asuncion10.systemid='47'
AND substring_index(elisa.timecode,':',1) =
substring_index(asuncion10.timecode,':',1)
AND elisa.timecode > now() - INTERVAL 7 DAY
AND asuncion10.timecode > now() - INTERVAL 7 DAY
GROUP BY substring_index(elisa.timecode,':',1)
ORDER BY substring_index(elisa.timecode,':',1);
+------------+-------+---------------+----------+---------+------+--------+-----------------------------+
| table | type | possible_keys | key | key_len | ref | rows | Extra
| |
+------------+-------+---------------+----------+---------+------+--------+-----------------------------+
| elisa | range | timecode | timecode | 8 | NULL | 612892 | where
|used; Using temporary |
| asuncion10 | range | timecode | timecode | 8 | NULL | 612892 | where used
| |
+------------+-------+---------------+----------+---------+------+--------+-----------------------------+
2 rows in set (0.02 sec)
This query takes quite a long time to execute, and I'm sure it can be done more
elegant and faster....just don't know how.
Anyone ?
It's MySQL 3.23.49 with InnoDB tables.
/Jesper
---------------------------------------------------------------------
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