我有一个包含带时间戳的数字数据点的表,如下所示:
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 :(得分:2)
正如您的解释所示,查询未在连接上使用索引。如果没有索引,则必须扫描两个表中的每一行以处理连接。
首先,确保连接中使用的列都已编入索引。
如果是,则可能是导致问题的列类型。您可以创建时间的整数表示,然后使用它来连接两个表。