私は2つのテーブルを持っています。スローMySQL SELECT MAX(ID)はどこのステートメントではありません
最初のテーブルは私のオブジェクト用です(〜1,000行)。私はこのクエリを使用している場合は
Table Name: object
ID | name
1 | Dummy object 1
2 | Dummy object 2
3 | Dummy object 3
...
724 | Dummy object 724
...
etc.
第二表はオブジェクトイベント(200,000行)
Table Name: events
ID | ID_OBJ | ID_MES | description | timestamp
1 | 3 | 3071 | Test event | 2017-01-28 12:00:01
2 | 4 | 3001 | Doors opened | 2017-01-28 13:00:04
3 | 3 | 3002 | Doors closed | 2017-01-28 13:33:45
...
etc...
のためであり、それはテーブルからデータをロードするために約10秒かかります:
SELECT
o.ID, o.name, e.timestamp AS last_event
FROM
object AS o
LEFT JOIN
events AS e
ON
e.ID_OBJ = o.ID
AND
(SELECT MAX(ID) FROM events WHERE events.ID_OBJ = o.ID AND ID_MES != 3071)
GROUP BY
o.ID
最後のイベントのタイムスタンプを含むオブジェクトのリストを取得する必要がありますが、ID_MES 3071のイベントは含める必要はありません。
私の質問から "AND ID_MES!= 3071"を削除すると、本当に速く動作します。誰もがこの問題の解決策を知っていてスピードを上げることはできますか?
MAX(ID)の目的は何ですか?あなたはそれを何かと比較しません。あなたは 'ON e.ID_OBJ = o.IDとe.ID_MES!= 3071'と書くことができませんでしたか? – fafl
最新のイベントを最も高いIDで選択するためのMAX(ID)。 – VigoKrumins
この回答を確認してください:http://stackoverflow.com/a/7745635/5710637 – fafl