我在同一个数据库上有两个表,Device
并且EventData
;两个表都有列accountID
和deviceID
,它们也是主键。
在Device
表中有一个名为 的列linkDescription
。
我需要在 table 中复制一些行,在 table中EventData
,accountID
在column 中有一些文本。deviceID
Device
linkDescription
例子:
设备表
accountID DeviceID linkDescription
12345 5800 444
12345 5700 445
12345 5500 null <--literally null
12388 4400 555
12388 4450 555
事件数据表
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));
但是是两个慢,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
因此,至少据我所知,正在检查整个表格,这就是为什么这么慢。
我怎样才能更快地做我想做的事?