几种Mysql数据传输方法效率的比较

数据库最主要的功能是存储数据,并能够实现实时快速读写操作,其中有些代表数据库如Access(微软),Oracle(Oracle)等。Mysql属于中小型数据库,被Oracle收购后仍然保持开源,该数据库与Java之间的连接通过jdbc协议实现。一般常见格式如下:

        //创建连接类        Connection conn = null;        //创建文件传输类
        Statement stmt = null;        //创建文件回收类
        ResultSet rs = null;
        try{
            //调用Class类的方法创建驱动
            Class.forName("com.mysql.jdbc.Driver");
            //连接地址包括:IP,MySQL的账号,密码
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/Newdatabase", "1234", "1234");
            stmt = conn.createStatement();
            String sql = "select * from account1";            //执行语言命令
            rs = stmt.executeQuery(sql);
        }catch(Exception ex){
            ex.printStackTrace();
        }finally{
            if(rs!=null){
                try{
                    rs.close();
                }catch(Exception ex){
                    ex.printStackTrace();
                }
            }
            if(stmt!=null){
                try{
                    stmt.close();
                }catch(Exception ex){
                    ex.printStackTrace();
                }
            }
            if(conn!=null){
                try{
                    conn.close();
                }catch(Exception ex){
                    ex.printStackTrace();
                }
            }
        }

下面比较几种传输数据的方法,通过测定传输10000条数据所需的时间,来比较效率。

1. 直接用for循环10000次,该方法耗时634592毫秒

Date d1 = new Date();
...
for(int i =1; i<=10000; i++){
    sql = "insert into test1(others,list) value(null,999999)";
    stmt.executeUpdate(sql);}
Date d2 = new Date();
System.out.println(d2.getTime()-d1.getTime());

2. 取消自动传输语言命令,调用Connection的commit()方法,即手动提交事务。该方法耗时5537毫秒

Date d1 = new Date();
...
conn.setAutoCommit(false);
...
for(int i =1; i<=10000; i++){
       sql = "insert into test1(others,list) value(null,999999)";
       stmt.executeUpdate(sql);
}
conn.commit();
Date d2 = new Date();
System.out.println(d2.getTime()-d1.getTime());

3. 通过创建多个Statement,同时传输。该方法耗时646904毫秒

        //创建5个Statement
        Statement stmt1=null;
        Statement stmt2=null;
        Statement stmt3=null;
        Statement stmt4=null;
        Statement stmt5=null;
        try{
            Date d1 = new Date();
            ...
            stmt1 = conn.createStatement();
            stmt2 = conn.createStatement();
            stmt3 = conn.createStatement();
            stmt4 = conn.createStatement();
            stmt5 = conn.createStatement();
            String sql = null;
            for(int i =1; i<=2000; i++){
                sql = "insert into test1(others,list) value(null,999999)";
                stmt1.executeUpdate(sql);
                stmt2.executeUpdate(sql);
                stmt3.executeUpdate(sql);
                stmt4.executeUpdate(sql);
                stmt5.executeUpdate(sql);
            }
            Date d2 = new Date();
            System.out.println(d2.getTime()-d1.getTime());        }

4. 通过创建多线程传输数据。该方法耗时239143毫秒

   public void method4(){
        Date d1 = new Date();
        Megadata M1 = new Megadata();
        Megadata M2 = new Megadata();
        Megadata M3 = new Megadata();
        Megadata M4 = new Megadata();
        Megadata M5 = new Megadata();
        M1.start();
        M2.start();
        M3.start();
        M4.start();
        M5.start();
        try{
            M1.join();
            M2.join();
            M3.join();
            M4.join();
            M5.join();
        }catch(Exception e){
            e.printStackTrace();
        }
        Date d2 = new Date();
        System.out.println(d2.getTime()-d1.getTime());
    }

    public void run(){
        try{
            ...

for(int i=0;i<2000;i++){
                sql = "insert into test1(others,list) value(null,999999)";
                stmt.executeUpdate(sql);
            }

        }catch(Exception ex){
            ex.printStackTrace();
        }finally{
            if(stmt!=null){
                try{
                    stmt.close();
                }catch(Exception ex){
                    ex.printStackTrace();
                }
            }
            if(conn!=null){
                try{
                    conn.close();
                }catch(Exception ex){
                    ex.printStackTrace();
                }
            }
        }

    }

当然方法还有其他,从这四种可以看出手动提交事务更高效,然而这却是一个问题。。。

时间: 2024-10-20 10:37:55

几种Mysql数据传输方法效率的比较的相关文章

创建用户的方法 3种mysql创建方法

mysql创建用户的方法分成三种:INSERT USER表的方法.CREATE USER的方法.GRANT的方法.   一.账号名称的构成方式   账号的组成方式:用户名+主机(所以可以出现重复的用户名,跟其他的数据库不一样)   用户名:16字符以内.   主机名:可以用主机名和IP地址,也可以用通配符   通配符说明:172.18.10.%(IP地址为172.18.10段的所有IP地址都可以访问)   二.通过CREATE USER命令进行创建用户   脚本:CREATE USER 'use

oracle 查询当天记录 三种方法效率比较

-- 查询一表中当天生成的数据 -- 原表mobilefrends中的cdate字段上有索引,创建索引语句是:create index mobilefrends_cdate_idx on mobilefrends(cdate); --------------------------------------------------------------------------------------------------------------------- -- 方法一:用to_char()

提高MySQL数据库查询效率的几个技巧(转载)

[size=5][color=Red]提高MySQL数据库查询效率的几个技巧(转)[/color][/size]      MySQL由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用.我在开发一个P2P应用的时候曾经使用MySQL来保存P2P节点,由于P2P的应用中,结点数动辄上万个,而且节点变化频繁,因此一定要保持查询和插入的高效.以下是我在使用过程中做的提高效率的三个有效的尝试. l 使用statement进行绑定查询 使用statement可以提前构建查询语法树,在查询时不再

详细讲解安全升级MySQL的方法

MySQL升级是非常必要的. 我们在Percona Support上列出了关于MySQL升级最佳实践的各种问题.这篇文章推荐了一些不同情况下升级MySQL的方法. 为什么MySQL升级是必须的? 原因有很多,比如:为了使用新增的特性,基于性能方面的考量, 修复的bug. 但是在没有充分的测试以前就应用到你的应用中是非常危险的, 因为升级可以能会让你的应用不能正常运作- 也可能引起性能的问题. 此外, 我建议你关注MySQL的发布信息和Percona Server- 看看最近的版本有什么变化. 也

产品经理常用的四种需求收集方法简述

A 客户访谈 客户访谈是通过面对面的交流方式了解具体客户对产品.对流程的需求.观点和看法. 客户访谈的内容可以包括: 1.了解哪些需求对客户比较重要. 2.就了解到的一些需求请客户协助进行优先排序. 3.就问题改进建议的初步想法与客户进行讨论,确认是否能够满足客户需求. 客户访谈的优点包括: 1.由于是面对面的交流,因此在调查内容上更加灵活,可以随时根据问答状况就一些内容进行深入讨论,获得更多的客户感受. 2.客户可以再调查人的协助下,进行一些较为复杂的问卷调查. 3.客户访谈方式的适用面广,可

又一种Mysql报错注入

from:https://rdot.org/forum/showthread.php?t=3167 原文是俄文,所以只能大概的翻译一下 这个报错注入主要基于Mysql的数据类型溢出(不适用于老版本的Mysql) mysql> SELECT 18446744073709551610 * 2; ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '(18446744073709551610 * 2)' mysql> SELECT

MySQL 升级方法指南大全

MySQL 升级方法指南大全 http://blog.sina.com.cn/s/blog_5a8b8eb80100ld7a.html 通常,从一个发布版本升级到另一个版本时,我们建议按照顺序来升级版本.例如,想要升级 MySQL 3.23 时,先升级到 MySQL 4.0,而不是直接升级到 MySQL 4.1 或 MySQL 5.0. 如果都是比较新的版本的升级可以参考下面的文章, MySQL数据库的版本更新很快,新的特性也随之不断的更新,更主要的是解决了很多影响我们应用的BUG,为了让我们的

守护进程接收终端输入的一种变通性方法(二)

前言 本文作为<守护进程接收终端输入的一种变通性方法>的补充版,主要讨论不使用第三方库时,如何支持字符终端命令行的退格和历史记录.文中涉及的代码运行环境如下: 一  退格键 术语“退格”(BS,BackSpace)本意指删除光标左侧的一个字符.最初的打字机中,退格键将机架(carriage)回退一个位置:而在现代计算机系统中,退格键将显示器光标左移一个位置,并删除该处的字符,然后将该处之后的文字左移一个位置. 删除(DEL,Delete)键可追溯到计算机使用打孔磁带的年代.当时,纠正一个字符打

将excel数据导入到mysql的方法

文本框被键盘遮挡到了,不会再获取焦点的时候被顶到键盘顶部.解决方案:设置A的Position为绝对定位absolute即可,其他几种定位方式未测试,但是不能是fixed ,正是因为这种定位方式,导致它无法被顶上去 某日同事丢给我一个看上去复杂的查询(实际就涉及两张表,套来套去)说只是换了日期条件,但一个查询5秒出数据,一个根本查不出来.现在整理下解决过程,及涉及的知识点. 关于Nginx模块开发的博客资料,网上很多,很多.但是,每篇博客都只提要点,无法"step by step"照着做