同じデータベースに 2 つのテーブルがDevice
ありEventData
ます。両方のテーブルには列accountID
とがありdeviceID
、これらも主キーです。
Device
テーブルには、 という名前の列がありますlinkDescription
。
テーブル内のいくつかの行を複製する必要があり、そのテーブル内で、列内EventData
にいくつかのテキストがあります。accountID
deviceID
Device
linkDescription
例:
デバイス テーブル
accountID DeviceID linkDescription
12345 5800 444
12345 5700 445
12345 5500 null <--literally null
12388 4400 555
12388 4450 555
EventData テーブル
accountID DeviceID timestamp
12345 5800 123335544
12345 5700 123335544
12345 5500 123335544
12388 4400 123335544
12388 4450 123335544
12345 5800 123335548
12345 5700 123335549
12345 5500 123335549
12388 4400 123335545
12388 4450 123335546
ここで、いくつかの行を複製し、 fromテーブルを使用してEventData
変更する必要があります。したがって、次のデータがあります。accountID
linkDescription
Device
EventData
accountID DeviceID timestamp
12345 5800 123335544
12345 5700 123335544
12345 5500 123335544
12388 4400 123335544
12388 4450 123335544
12345 5800 123335548
12345 5700 123335549
12345 5500 123335549
12388 4400 123335545
12388 4450 123335546
444 5800 123335544 <-duplicated data with new accountID from here
445 5700 123335544
555 4400 123335544
555 4450 123335544
444 5800 123335548
445 5700 123335549
555 4400 123335545
555 4450 123335546
だから今、私はより大きなの一部になる次のクエリをテストしていますINSERT INTO
:
explain
select *
from EventData
where
EventData.accountID in (
select accountID
from Device
where Device.linkDescription > '0')
and EventData.deviceID in (
select deviceID
from Device
where Device.linkDescription> '0')
and timestamp > (unix_timestamp(now()-interval 20 minute));
しかし、2 つ遅く、EXPLAIN
コマンドは次のように表示します。
ID select_type table type posible_keys key key_len ref rows Extra
1 PRIMARY EventData ALL null null null null 47555718 Using where
3 DEPENDENT SUBQUERY Device ALL null null null null 8043 Using where
2 DEPENDENT SUBQUERY Device index_subquery PRIMARY PRIMARY 34 func 3 Using where
したがって、少なくとも私が理解しているように、テーブル全体をチェックしているため、非常に遅いのです。
どうすればやりたいことをより速く行うことができますか?