最近一直在跟SQL打仗,總想著有沒有更快的方法。
實驗對象: 共有67萬筆左右的原始資料要做清整,之後再INSERT到結果表中。
若一筆一筆CONNECTION OPEN() , CLOSE(), RUN個70萬次,一定是最慢的。
所以,就設定一次抓1000筆先把SQL組好再做INSERT。
原先的組法是
INSERT INTO A (a1,a2,a3) values ('x1','x2','x3');
INSERT INTO A (a1,a2,a3) values ('x1','x2','x3')
這樣的速度大概15分鐘run30萬筆左右。
後來發現sql 2008有新的用法,還有人寫ppt說速度會提升,寫法如下:
INSERT INTO A (a1,a2,a3) values
('x1','x2','x3'),('x1','x2','x3');
很快速的來做實驗,結果,結果,15分鐘只run了9萬筆資料。噗。害我有點無言。
後來,又突然想到,好像忘了去原始資料表中,加一下index。
速度上就加快了些,約15分鐘36萬筆資料。
大概是極限了。
不知還有沒有更快的方法?
噗。就開始找了找,發現有人也跟我做類似的實際,他的結論是....
INSERT INTO A (a1,a2,a3) values
('x1','x2','x3'),('x1','x2','x3');
這種寫法的速度跟一筆一筆insert差不多。
有種被騙的感覺。Orz
註:全部清整完,花了31分鐘~~(灑花)
結論:要記得取資料時,若有條件時,要記得做index的設定,大量insert into時,要先一批批組好。
沒有留言:
張貼留言