単純な問題のように見えますが、苦労しています。以下のように2つのテーブルがあります。
テーブル 1 には、部屋のイベントと時間 (秒) が含まれています テーブル 2 には、部屋へのアクセス時間 (秒) と人の名前があります
テーブル1のすべての行について、最後に部屋に入った人を出力したいのですが、最後の5分間に部屋に入った場合に限ります
time は両方のテーブルのプライマリ インデックスです
表1の例(イベント)
|time |event|
|1294427839|poff |
|1294427939|pofn |
|1294428839|poff |
表 2 の例 (エントリ)
|time |name|
|1294427829|tpeters |
|1294427929|jsmith |
|1294428829|abeach |
テーブル 1 には約 5,000 行、テーブル 2 には約 300,000 行があります。現在、次のクエリを使用していますが、完了するまでに数分かかります。誰かが私が間違っていることを教えてください。
select (SELECT name FROM entries entries WHERE entries.time > events.time-300 and entries.time < events.time order by entries.time desc limit 1) from events events
どんな助けでも大歓迎です。
詳細を追加:
ID SELECT_TYPE TABLE TYPE POSSIBLE_KEYS KEY KEY_LEN ROWS FILTERED EXTRA
1 PRIMARY events index PRIMARY 8 3 100 Using index
2 DEPENDENT SUBQUERY entries index PRIMARY PRIMARY 8 1 300 Using where
CREATE TABLE イベント (
time
int(11) NOT NULL DEFAULT '0', PRIMARY KEY ( time
) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
CREATE TABLE エントリ (
time
int(11) NOT NULL DEFAULT '0', PRIMARY KEY ( time
) )ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;