2013-01-11 51 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

正如您的解釋所示,查詢不使用連接上的索引。如果沒有索引,它必須掃描兩個表中的每一行來處理連接。

首先,確保連接中使用的列都被索引。

如果是,那麼它可能是導致問題的列類型。您可以創建時間的整數表示形式,然後使用它來加入這兩個表格。