【问题标题】:MySQL join issue, query hangsMySQL 连接问题,查询挂起
【发布时间】:2013-01-11 19:17:10
【问题描述】:

我有一个表格,其中包含带有时间戳的数字数据点,如下所示:

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 显示了,谢谢!

谢谢!

【问题讨论】:

  • 使用EXPLAIN时得到什么输出?
  • 更新了我的问题 - 谢谢!

标签: mysql performance join


【解决方案1】:

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

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

如果是,则可能是导致问题的列类型。您可以创建时间的整数表示,然后使用它来连接两个表。

【讨论】:

    猜你喜欢
    • 2013-03-27
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多