MySql 插入(insert)性能测试

测试环境: 笔记本电脑

CPU:I5 

系统:MAC OS 10.7

内存:8G

硬盘:5400转,笔记本硬盘

 

MySql 版本:Oracle官网下载的mysql-5.5.24-osx10.6-x86_64, 默认安装

MySql JDBC驱动版本:mysql-connector-java-5.1.20

 

 

MySql建表语句:

 CREATE  TABLE `dev`.`test_insert` (

  `id` INT NOT NULL ,

  `uname` VARCHAR(10) NULL ,

  PRIMARY KEY (`id`) )

 ENGINE = InnoDB;

 

测试结果 :

 

 

创建连接用时355 ms

执行清理操作:成功

每执行100000次sql提交一次事务

MySql非批量插入10万条记录,用时12128 ms,平均每秒执行8245条

----------------------------------

创建连接用时13 ms

执行清理操作:成功

每执行10000次sql提交一次事务

MySql非批量插入10万条记录,用时11667 ms,平均每秒执行8571条

----------------------------------

创建连接用时13 ms

执行清理操作:成功

每执行1000次sql提交一次事务

MySql非批量插入10万条记录,用时11744 ms,平均每秒执行8514条

----------------------------------

创建连接用时12 ms

执行清理操作:成功

每执行100次sql提交一次事务

MySql非批量插入10万条记录,用时14796 ms,平均每秒执行6758条

----------------------------------

创建连接用时15 ms

执行清理操作:成功

每执行10次sql提交一次事务

MySql非批量插入10万条记录,用时15917 ms,平均每秒执行6282条

----------------------------------

创建连接用时14 ms

执行清理操作:成功

每执行1次sql提交一次事务

MySql非批量插入10万条记录,用时89030 ms,平均每秒执行1123条

----------------------------------

创建连接用时13 ms

执行清理操作:成功

每执行100000次sql提交一次事务

MySql批量插入10万条记录,用时1298 ms,平均每秒执行77041条

----------------------------------

创建连接用时16 ms

执行清理操作:成功

每执行10000次sql提交一次事务

MySql批量插入10万条记录,用时1221 ms,平均每秒执行81900条

----------------------------------

创建连接用时12 ms

执行清理操作:成功

每执行1000次sql提交一次事务

MySql批量插入10万条记录,用时1418 ms,平均每秒执行70521条

----------------------------------

创建连接用时15 ms

执行清理操作:成功

每执行100次sql提交一次事务

MySql批量插入10万条记录,用时2252 ms,平均每秒执行44404条

----------------------------------

创建连接用时13 ms

执行清理操作:成功

每执行10次sql提交一次事务

MySql批量插入10万条记录,用时9139 ms,平均每秒执行10942条

----------------------------------

创建连接用时10 ms

执行清理操作:成功

每执行1次sql提交一次事务

MySql批量插入10万条记录,用时80250 ms,平均每秒执行1246条

----------------------------------



测试代码:
package com.devplatform.module.core.dao.jdbc;  
import java.sql.Connection;    
import java.sql.DriverManager;    
import java.sql.PreparedStatement;    
import java.sql.SQLException;    
import java.sql.Statement;  
  
/** 
   MySql 插入(insert)性能测试 
   Oracle 插入(insert)性能测试 
 
    MySql建表语句: 
    CREATE  TABLE `dev`.`test_insert` ( 
      `id` INT NOT NULL , 
      `uname` VARCHAR(10) NULL , 
      PRIMARY KEY (`id`) ) 
    ENGINE = InnoDB; 
 */  
public class JdbcInsterTest {    
      
    static int  count=100000;//总次数  
      
    //一定要写rewriteBatchedStatements参数,Mysql批量插入才性能才理想  
    static String mySqlUrl="jdbc:mysql://127.0.0.1:3306/dev?rewriteBatchedStatements=true";  
    static String mySqlUserName="root";    
    static String mySqlPassword="1234";    
      
    static String oracleurl="jdbc:oracle:thin:@192.168.10.139:1521:orcl";    
    static String oracleuserName="scott";    
    static String oraclepassword="tiger";   
      
    static String sql = "insert into test_insert(id,uname) values(?,?)";   
      
    //每执行几次提交一次  
    static int[] commitPoint={count,10000,1000,100,10,1};  
      
    public static void main(String[] args) {    
        for(int point:commitPoint){  
            test_mysql(point);    
        }  
        for(int point:commitPoint){  
            test_mysql_batch(point);    
        }  
//      for(int point:commitPoint){  
//            test_oracle(point);    
//      }  
//      for(int point:commitPoint){  
//            test_oracle_batch(point);    
//      }  
    }    
      
    /** 
     * 创建连接 
     * @return 
     */  
    public static Connection getConn(String flag){  
        long a=System.currentTimeMillis();  
        try {          
            if("mysql".equals(flag)){  
                Class.forName("com.mysql.jdbc.Driver");          
                Connection conn =  DriverManager.getConnection(mySqlUrl, mySqlUserName, mySqlPassword);       
                conn.setAutoCommit(false);    
                return conn;  
            }else if("oracle".equals(flag)){  
                Class.forName("oracle.jdbc.OracleDriver");          
                Connection conn =  DriverManager.getConnection(oracleurl, oracleuserName, oraclepassword);   
                conn.setAutoCommit(false);    
                return conn;  
            }else{  
                System.out.println();  
                throw new RuntimeException("flag参数不正确,flag="+flag);  
            }  
        } catch (Exception ex) {    
            ex.printStackTrace();    
        }finally{    
            long b=System.currentTimeMillis();    
            System.out.println("创建连接用时"+ (b-a)+" ms");   
        }  
        return null;  
    }  
    /** 
     * 关闭连接 
     * @return 
     */  
    public static void close(Connection conn){  
         try {    
             if(conn!=null){  
                 conn.close();    
             }  
         } catch (SQLException e) {    
             e.printStackTrace();    
         }  
    }  
    /** 
     * 删除旧数据 
     * @return 
     */  
    public static void clear(Connection conn){  
        try{  
            Statement st=conn.createStatement();  
            boolean bl=st.execute("delete FROM test_insert");  
            conn.commit();  
            st.close();  
            System.out.println("执行清理操作:"+(bl==false?"成功":"失败"));  
        }catch(Exception e){  
            e.printStackTrace();  
        }  
    }  
    /** 
     * 打印信息 
     * @return 
     */  
    public static void print(String key,long startTime,long endTime,int point){  
        System.out.println("每执行"+point+"次sql提交一次事务");  
        System.out.println(key+",用时"+ (endTime-startTime)+" ms,平均每秒执行"+(count*1000/(endTime-startTime))+"条");  
        System.out.println("----------------------------------");  
    }  
    /**  
     * mysql非批量插入10万条记录  
     */    
    public static void test_mysql(int point){    
        Connection conn=getConn("mysql");    
        clear(conn);  
        try {          
              PreparedStatement prest = conn.prepareStatement(sql);          
              long a=System.currentTimeMillis();    
              for(int x = 1; x <= count; x++){          
                 prest.setInt(1, x);          
                 prest.setString(2, "张三");          
                 prest.execute();    
                 if(x%point==0){  
                     conn.commit();  
                 }  
              }          
              long b=System.currentTimeMillis();    
              print("MySql非批量插入10万条记录",a,b,point);  
        } catch (Exception ex) {    
            ex.printStackTrace();    
        }finally{    
            close(conn);      
        }    
    }    
      
    /**  
     * mysql批量插入10万条记录  
     */    
    public static void test_mysql_batch(int point){    
        Connection conn=getConn("mysql");    
        clear(conn);  
        try {          
            PreparedStatement prest = conn.prepareStatement(sql);          
            long a=System.currentTimeMillis();    
            for(int x = 1; x <= count; x++){          
                prest.setInt(1, x);          
                prest.setString(2, "张三");          
                prest.addBatch();      
                if(x%point==0){  
                    prest.executeBatch();        
                    conn.commit();  
                }  
            }          
            long b=System.currentTimeMillis();    
            print("MySql批量插入10万条记录",a,b,point);  
        } catch (Exception ex) {    
            ex.printStackTrace();    
        }finally{    
            close(conn);      
        }    
    }    
      
    /**  
     * oracle非批量插入10万条记录  
     */    
    public static void test_oracle(int point){    
        Connection conn=getConn("oracle");    
        clear(conn);  
        try {          
            PreparedStatement prest = conn.prepareStatement(sql);          
            long a=System.currentTimeMillis();    
            for(int x = 1; x <= count; x++){          
                prest.setInt(1, x);          
                prest.setString(2, "张三");          
                prest.execute();    
                if(x%point==0){  
                    conn.commit();  
                }  
            }    
            long b=System.currentTimeMillis();    
            print("Oracle非批量插入10万记录",a,b,point);  
        } catch (Exception ex) {    
            ex.printStackTrace();    
        }finally{    
            close(conn);      
        }    
    }    
    /**  
     * oracle批量插入10万条记录  
     */    
    public static void test_oracle_batch(int point){    
        Connection conn=getConn("oracle");     
        clear(conn);  
        try {          
            PreparedStatement prest = conn.prepareStatement(sql);          
            long a=System.currentTimeMillis();    
            for(int x = 1; x <= count; x++){          
                prest.setInt(1, x);          
                prest.setString(2, "张三");          
                prest.addBatch();    
                if(x%point==0){  
                    prest.executeBatch();        
                    conn.commit();  
                }  
            }    
            long b=System.currentTimeMillis();    
            print("Oracle批量插入10万记录",a,b,point);  
        } catch (Exception ex) {    
            ex.printStackTrace();    
        }finally{   
            close(conn);   
        }    
    }    
}  

  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值