2013-01-11 3 views
0

J'ai une table contenant des points de données numériques avec horodatages, comme ceci:MySQL joindre question, requête bloque

CREATE TABLE `value_table1` (
    `datetime` datetime NOT NULL, 
    `value` decimal(14,8) DEFAULT NULL, 
    KEY `datetime` (`datetime`) 
) ENGINE=InnoDB; 

Ma table contient un point de données pour toutes les 5 secondes, timestamps dans la table seront, par exemple, :

"2013-01-01 10:23:35" 
"2013-01-01 10:23:40" 
"2013-01-01 10:23:45" 
"2013-01-01 10:23:50" 

J'ai quelques tables de ces valeurs, et il est parfois nécessaire d'examiner le rapport entre deux séries de valeurs. J'ai donc tenté une jointure, mais il semble ne pas fonctionner:

SELECT value_table1.datetime, value_table1.value/value_table2.rate 
    FROM value_table1 
    JOIN value_table2 
    ON value_table1.datetime = value_table2.datetime 
    ORDER BY value_table1.datetime ASC; 

Exécution EXPLIQUEZ sur la requête indique:

+----+-------------+--------------+------+---------------+------+---------+------+-------+---------------------------------+ 
| id | select_type | table  | type | possible_keys | key | key_len | ref | rows | Extra       | 
+----+-------------+--------------+------+---------------+------+---------+------+-------+---------------------------------+ 
| 1 | SIMPLE  | value_table1 | ALL | NULL   | NULL | NULL | NULL | 83784 | Using temporary; Using filesort | 
| 1 | SIMPLE  | value_table2 | ALL | NULL   | NULL | NULL | NULL | 83735 |         | 
+----+-------------+--------------+------+---------------+------+---------+------+-------+---------------------------------+ 

Modifier Problème résolu, aucune idée où mon index a disparu à. EXPLAIN l'a montré, merci!

Merci!

+0

Quelle sortie obtenez-vous en utilisant 'EXPLAIN'? – datasage

+0

mis à jour ma question - merci! – user1094786

Répondre

2

Comme le montre votre explication, la requête n'utilise pas d'index sur la jointure. Sans index, il doit analyser chaque ligne des deux tables pour traiter la jointure. Tout d'abord, assurez-vous que les colonnes utilisées dans la jointure sont toutes les deux indexées.

Si tel est le cas, il se peut que ce soit le type de colonne qui pose problème. Vous pouvez créer une représentation entière de l'heure, puis l'utiliser pour joindre les deux tables.