這是我當前正在運行的查詢(28小時過去了!):慢MySQL查詢佔滿了我的磁盤空間
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 .. 如何以最佳方式實現此目的以提高性能並且不使用磁盤空間? 謝謝
您確定只有6個編碼?我懷疑交叉連接產生的數據比你想象的要多得多。 –
不,我有成千上萬的代碼...這只是一個樣本 – user2578185
用LIMIT 1000開始查詢並查看結果有什麼問題 – jaczes