java - 从mysql中查询数据,然后插入到另一个数据库中,怎样提升这个代码的运行速度
巴扎黑
巴扎黑 2017-04-17 17:51:11
0
2
628

我从mysql中查询数据,然后将查询到的数据插入到另一个数据库中,目前速度查询5000个并插入的速度大概在45秒到200秒之间。怎样可以提升它的速度。
这条sql本身的执行时间在numiid很多的时候或者表中数据较多的时候就较慢,有时在1.6秒以上
sql:
select ir.id,iss.numIid,iss.bid,b.bname as bT,iss.cid,c.name as cT,iss.userId ,ss.shopTitle,iss.title as itemTitle,ir.type,ir.page,if(count(keyword) is null,0,count(keyword)) keywordCount1,IF(k.ssrq is null, 0,sum(k.ssrq )) ssrqCount1,if(iss.sales!=-1,iss.sales,IF(iss.trades!=-1,iss.trades,iss.receivers)) salesCount1

    from table iss
    inner join table0  ir  on iss.numIid=ir.numIid
    <if test="type != null"> and ir.type =#{type}</if> 
    <if test="type == null"> and ir.type in (1,2,3,4,11,12,13,21,22,31,32)</if>
    <if test="page != null"> and ir.page =#{page}</if> 
    <if test="page == null"> and ir.page in(1,2,3,4,5,6,7,8,9,10) </if> 
    left join table1_${batchId} k on ir.keyword =k.id
    left join table2_${batchId} ss on ss.userId =iss.userId
    left join table3  b  on iss.bid=b.bid 
    left join table4  c  on iss.cid=c.id
    where iss.numIid  in (
        <foreach collection="numIids" item="numIid" separator=",">
          #{numIid}
        </foreach>
    )
    group by iss.numIid,ir.page,ir.type
巴扎黑
巴扎黑

全員に返信(2)
大家讲道理

45 秒から 200 秒までの時間幅は非常に大きいです。
1. 作成した SQL が複雑すぎるため、SQL を簡略化し、一部のロジック処理をコード内で実行することをお勧めします。
2. 別のデータベースに保存し、バッチ送信を検討します。

いいねを押す +0
大家讲道理

1. クエリの最初のステップで最適化の余地があるかどうかを確認します。1 秒を超えるクエリは、インデックスが使用されているかどうかを確認します。
2. 挿入ロジックの疑似コードを投稿していただけますか。5,000 個のデータを挿入するのに数十秒かかるとは思えません。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート