0

次のように、タイムスタンプ付きの数値データ ポイントを保持するテーブルがあります。

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"

私はそのような値のテーブルをいくつか持っており、2 つの値のシリーズ間の比率を確認する必要がある場合があります。したがって、参加を試みましたが、うまくいかないようです:

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はそれを示しました、ありがとう!

ありがとう!

4

1 に答える 1

2

説明が示すように、クエリは結合でインデックスを使用していません。インデックスがない場合、結合を処理するために両方のテーブルのすべての行をスキャンする必要があります。

まず、結合で使用される列が両方ともインデックス化されていることを確認してください。

そうである場合、問題を引き起こしているのは列のタイプである可能性があります。時間の整数表現を作成し、それを使用して 2 つのテーブルを結合できます。

于 2013-01-11T19:30:35.993 に答える