我正在運行我認爲是相當直接的更新在一個相當大的表上。我試圖找出爲什麼這個簡單的更新運行得如此之慢。花了大約5個小時才完成。這個簡單的更新爲什麼這麼慢運行?
master
表:約2米行和90場。 builder
表:約1.5米行和15個字段
我最初曾嘗試直接插入:
-- Update master table with newly calculated mcap
update master as m
inner join
(select b.date_base, b.gvkey, sum(b.sec_cap) as sum_sec_mkt
from builder as b
group by b.gvkey, b.date_base) as x
on x.gvkey = m.gvkey AND
x.date_base = m.date_base
set m.mcap = x.sum_sec_mkt;
可惜這跑了數個小時,等待4小時後,我終於把它打死了。 然後我想我會創建一個臨時表並將最初選擇的結果插入到它中。
CREATE TABLE `temp_mkt_cap` (
`date_base` date NOT NULL,
`gvkey` varchar(15) DEFAULT NULL,
`mkt_cap` double DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- insert market cap values in to temporary table
insert into temp_mkt_cap
select b.date_base, b.gvkey, sum(b.sec_cap) as sum_sec_mkt
from builder as b
group by b.gvkey, b.date_base;
ALTER TABLE temp_mkt_cap
add primary key (date_base, gvkey);
插入工作正常與temp_mkt_cap
有1.4m左右行,但最終更新了5個小時才能完成。
-- Update master table with newly calculated mcap
update master as m
inner join temp_mkt_cap as mc
on m.date_base = mc.date_base AND m.gvkey = mc.gvkey
set m.mcap = mc.mkt_cap;
'主' 具有 'date_base' 和gvkey_iid作爲PRIMARY KEYS
和gvkey作爲KEY
。 我已經在表格上完成了更復雜的插入和更新,並且無法解決爲什麼這不起作用。
任何幫助將不勝感激。 謝謝,
更新:在主表的鍵是:
ALTER TABLE master
ADD PRIMARY KEY (gvkey_iid,date_base),
ADD KEY date_offset (date_offset),
ADD KEY gvkey (gvkey),
ADD KEY iid (iid);
更新我添加了一個新的密鑰對主表和更新跑93.6secs,5個小時下來。感謝大家的幫助。
ALTER TABLE master
ADD KEY 'date-gvkey' (date_base, gvkey);
什麼都在'temp_mkt_cap'的鑰匙? – Sebas
@Sebas - 插入後我添加date_base和gvkey作爲主鍵 –
你需要date_offset,gvkey和iid上的這些單個鍵嗎?如果我遵循你的問題,你只需要你的主鍵。相同的temp_mkt_cap! – Sebas