2013-01-11 50 views
0

我有一个表保存数字数据点的时间戳,就像这样:MySQL的加入问题,查询挂起

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

我的表适用于每5秒一个数据点,所以在表中的时间戳会,如:

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

我有几个这样的值表,有时需要看看两个值系列之间的比例。 因此,我企图加入,但它似乎不工作:

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; 

运行EXPLAIN的查询显示:

+----+-------------+--------------+------+---------------+------+---------+------+-------+---------------------------------+ 
| 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 |         | 
+----+-------------+--------------+------+---------------+------+---------+------+-------+---------------------------------+ 

编辑 问题解决了,不知道从哪里我的索引消失了。 EXPLAIN显示它,谢谢!

谢谢!

+0

使用'EXPLAIN'时会得到什么输出? – datasage

+0

更新了我的问题 - 谢谢! – user1094786

回答

2

正如您的解释所示,查询不使用连接上的索引。如果没有索引,它必须扫描两个表中的每一行来处理连接。

首先,确保连接中使用的列都被索引。

如果是,那么它可能是导致问题的列类型。您可以创建时间的整数表示形式,然后使用它来加入这两个表格。