2017-08-08 68 views
0

我有這個,它工作正常,但它需要13分鐘才能完成有沒有辦法加快這一點。加速MSSQL到MySQL插入

insert into openquery(portal, 'select 
    klient_id, 
    smetka_br, 
    smetka_datum, 
    smetka_izdadena_datum, 
    smetka_platena_datum, 
    smetka_int_cena, 
    smetka_tv_cena, 
    smetka_dtv_cena, 
    mesto_uplata, 
    platena_tv, 
    platena_int, 
    platena_dtv, 
    datum_tv, 
    datum_int, 
    datum_dtv from smetki_data_temp') 
select 
    a.klient_id, a.barcode, a.datum_valuta, a.promena_datum, b.datum_uplata, a.iznos_INT, a.iznos_KDS, a.iznos_DTV, a.zabeleska, 
    a.platena_KDS, a.platena_INT, a.platena_DTV, 
    (Cast(godina_KDS as VARCHAR) + '-' + Cast(mesec_KDS as VARCHAR) + '-01') as datum_tv, 
    (Cast(godina_INT as VARCHAR) + '-' + Cast(mesec_INT as VARCHAR) + '-01') as datum_int, 
    (Cast(godina_DTV as VARCHAR) + '-' + Cast(mesec_DTV as VARCHAR) + '-01') as datum_dtv 
    from tSmetki as a 
    INNER JOIN tUplati as b on b.smetka_id = a.id 
    where a.barcode != '' 

有近2密爾行。選擇需要30秒才能完成。插入需要12分鐘。

Affected rows: 1905280 
    Time: 751.330s 
+0

您是否在tSmetki.Id和tUplati.smetka_id上創建了索引? – MKR

+0

這是一件日常事物嗎?將其作爲SQL作業運行可能會提高您的性能。 – Isaiah3015

+1

這可能是因爲你通過鏈接服務器(在你的案例中是'portal')。你可以使用類似SSIS或SQL Server中的導入/導出實用程序,它應該能夠進行一些優化。如果這不是一種選擇,那麼可以考慮對其進行批處理,以便在鏈接服務器上沒有2m行事務處理。我對MySQL不太瞭解,不知道他們提供了什麼ETL工具。 – Xedni

回答

0

正如@丹Bracuk所述,更新與刀片2萬行建立索引和檢查約束,這可以(並且不會)慢很多。 我的建議,只是爲了確保戰略是正確的,使一個腳本,

  • 滴上插入表
  • 各項指標執行大量的插入
  • 上插入表

由於創建索引第一步,不要篡改約束條件,不要碰其他任何東西。看看是否有執行時間的改進。希望這可以幫助。