批量插入測試

<insert id="insterSecurityPL" parameterType="java.util.List" >
    insert into base_syslog_security(asset_id,type,d_ip,d_port,s_ip,s_port,account,common_des,tag,operation_class,operation_result,operation_des,
    raw_log,severity,risk_grade,risk_type,risk_des,happen_time,status,create_time) values
    <foreach  collection="list" index="index" item="item"  separator=",">
    (
        #{item.asset_id}, #{item.type}, #{item.d_ip}, #{item.d_port}, #{item.s_ip}, #{item.s_port}, #{item.account},
        #{item.common_des}, #{item.tag}, #{item.operation_class}, #{item.operation_result}, #{item.operation_des}, #{item.raw_log}, #{item.severity},
        #{item.risk_grade}, #{item.risk_type}, #{item.risk_des}, #{item.happen_time}, #{item.status},NOW()
    )
    </foreach>
</insert>

 

10000

單條執行了:18秒!

批量執行了:2秒!

 

max_allowed_packet  最大允許包
innodb_buffer_pool_size 緩存區大小

 

修改後的插入操作能夠提高程序的插入效率。這裏第二種SQL執行效率高的主要原因是: (1)通過合併SQL語句,同時也能減少SQL語句解析的次數,減少了數據庫連接的I/O開銷,一般會把多條數據插入放在一條SQL語句中一次執行; (2)合併後日志量(MySQL的binlog和innodb的事務讓日誌)減少了,降低日誌刷盤的數據量和頻率,從而提高效率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章