这是我当前正在运行的查询(28 小时过去了!):
drop table if exists temp_codes;
create temporary table temp_codes
select distinct CODE from Table1;
alter table temp_codes
add primary key (CODE);
drop table if exists temp_ids;
create temporary table temp_ids
select distinct ID from Table1;
alter table temp_ids
add primary key (ID);
drop table if exists temp_ids_codes;
create temporary table temp_ids_codes
select ID, CODE
from temp_ids, temp_codes;
alter table temp_ids_codes
add index idx_id(ID),
add index idx_code(CODE);
insert into Table2(ID,CODE,cnt)
select
a.ID, a.CODE, coalesce(count(t1.ID), 0)
from
temp_ids_codes as a
left join Table1 as t1 on (a.ID = t1.ID and a.CODE=t1.CODE)
group by
a.ID, a.CODE;
我的表是这个(表1):
ID CODE
-----------------
0001 345
0001 345
0001 120
0002 567
0002 034
0002 567
0003 567
0004 533
0004 008
......
(millions of rows)
我正在运行上面的查询以获得这个(表2):
ID CODE CNT
1 008 0
1 034 0
1 120 1
1 345 2
1 533 0
1 567 0
2 008 0
2 034 1
...
CNT 是每个 ID 的每个代码的计数。如何以最佳方式实现这一点以提高性能而不使用磁盘空间?谢谢