2017-01-25 5 views
0

温度値とタイムスタンプの異なるテーブルがあります。グループ機能と2つの異なるタイムスタンプ(Join付き)を使用したMySQLクエリの最適化

SELECT UNIX_TIMESTAMP(l.TimeDate) time 
    , AVG(l.intemp) 
    , AVG(n.intemp) 
    , DATE_FORMAT(l.TimeDate, '%Y-%m-%d-%H') dates 
    FROM values.temps l 
    LEFT 
    JOIN values.net n 
    ON DATE_FORMAT(l.TimeDate, '%Y-%m-%d-%H') = DATE_FORMAT(n.TimeDate, '%Y-%m-%d-%H') 
WHERE YEARWEEK('2017-01-17 00:00:00',1) = YEARWEEK(l.TimeDate,1) 
GROUP 
    BY dates 
ORDER 
    BY dates ASC 

このクエリは少し遅いですが、それは動作し、私に1週間の値を与えます。だから私はそれをどのように最適化できますか?

+0

スロービットは結合であり、どちらもインデックスを使用できません。彼らができるように書き直す - 私はHが何であるか忘れる! – Strawberry

+0

こんにちは、お返事いただきありがとうございます。しかし、私はインデックスを持っています。だから私はそれをより良くする方法を知らない。 – kami

+0

関数はインデックスを使用できません。したがって、インデックスを使用する場合は、関数を削除する方法を考える必要があります。これは通常、範囲照会で行われます。私は例を投稿しようとするかもしれません... – Strawberry

答えて

0

実際に私は範囲クエリの中であなたのYEARWEEK条件を表現する方法を考えるのに苦労しているので、私は応答しませんでした。

私はこれがうまくいくと思ったが、「範囲」の使用を拒否した。

SELECT * 
    FROM my_table 
WHERE dt BETWEEN CONCAT(STR_TO_DATE(CONCAT(YEARWEEK('2017-01-25'), ' Monday'), '%x%v %W'), ' 00:00:00') 
       AND CONCAT(STR_TO_DATE(CONCAT(YEARWEEK('2017-01-25'), ' Sunday'), '%x%v %W'), ' 23:59:59') 

おそらく他の人が私の就学前のエラーに気づくことがあります。

+----+-------------+----------+------+---------------+------+---------+------+------+-------------+ 
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra  | 
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+ 
| 1 | SIMPLE  | my_table | ALL | dt   | NULL | NULL | NULL | 100 | Using where | 
+----+-------------+----------+------+---------------+------+---------+------+------+-------------+ 
+0

こんにちは、ありがとうございました。私は誰かが助けることを望む。しかし、あなたの助けをたくさんありがとう。 – kami

関連する問題