2017-08-08 27 views
0

私はこれを持っていますが、うまくいきますが、完了までには13分かかります。MySQLへのMSSQLの挿入速度を向上させる

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分かかります。 INSERTで2万行を更新、@Dan Bracukで述べたように

Affected rows: 1905280 
    Time: 751.330s 
+0

tSmetki.IdとtUplati.smetka_idにインデックスを作成しましたか? – MKR

+0

これは日常ですか?これをSQLジョブとして実行すると、パフォーマンスが向上する可能性があります。 – Isaiah3015

+1

おそらく、あなたがリンクされたサーバー(あなたの場合は 'portal')を使っているからです。 SSISやSQL Serverのインポート/エクスポートユーティリティなど、さまざまな最適化を行うことができるはずです。これがオプションでない場合は、バッチ処理を検討して、リンクされたサーバー上で2m行のトランザクションを実行する必要はありません。私はETLツールが提供するものを知るためにMySQLに精通していません。 – Xedni

答えて

0

はインデックスとチェック制約を構築し、これは(とし)多くを遅らせることができます。挿入されたテーブル

    • ドロップすべてのインデックスが
    • が挿入されたテーブル

    ようにインデックスを作成する大規模な挿入を実行することを 私のアドバイス、ちょうど戦略が正しいことを確認するために、スクリプトを作ります最初のステップは、制約を改ざんせず、他のものに触れないでください。実行時間の改善があるかどうかを確認してください。お役に立てれば。

  • 関連する問題