zoukankan      html  css  js  c++  java
  • 如何快速的将已知的1000万条数据插入到数据库中

    首先,可以定义1个1000万次的循环,每次循环插入1条数据,当1000万次循环全部执行结束,则插入完成!

    也可以使用1条INSERT语句插入多条数据,例如:

    INSERT INTO t_user (username, password, age, phone, email) VALUES
    ('user01', 'password01', 11, '13800138001', 'user01@qq.com'),
    ('user02', 'password02', 12, '13800138002', 'user02@qq.com'),
    ('user03', 'password03', 13, '13800138003', 'user03@qq.com'),
    ('user04', 'password04', 14, '13800138004', 'user04@qq.com'),
    ('user05', 'password05', 15, '13800138005', 'user05@qq.com'),
    ('user06', 'password06', 16, '13800138006', 'user06@qq.com'),
    ('user07', 'password07', 17, '13800138007', 'user07@qq.com'),
    ('user08', 'password08', 18, '13800138008', 'user08@qq.com'),
    ('user09', 'password09', 19, '13800138009', 'user09@qq.com'),
    ('user10', 'password10', 20, '13800138010', 'user10@qq.com'),
    ('user11', 'password11', 21, '13800138011', 'user11@qq.com'),
    ('user12', 'password12', 22, '13800138012', 'user12@qq.com'),
    ('user13', 'password13', 23, '13800138013', 'user13@qq.com'),
    ('user14', 'password14', 24, '13800138014', 'user14@qq.com'),
    ('user15', 'password15', 25, '13800138015', 'user15@qq.com'),
    ('user16', 'password16', 26, '13800138016', 'user16@qq.com'),
    ('user17', 'password17', 27, '13800138017', 'user17@qq.com'),
    ('user18', 'password18', 28, '13800138018', 'user18@qq.com'),
    ('user19', 'password19', 29, '13800138019', 'user19@qq.com'),
    ('user20', 'password20', 30, '13800138020', 'user20@qq.com');

    所以,可以将1000万条数据尝试以上的拼接再来执行,但是,由于拼接过长的SQL语句字符串会导致拼接时的效率非常低,所以,不可以使用1个字符串拼出1次插入太多数据的!可行的解决方案可以是:例如使用1条SQL语句插入1000条数据,并且把这样的做法循环1万次,就可以解决这个问题!

    另外,还可以通过批处理解决性能问题,其核心是一次性向MySQL发送多条SQL指令,但并不直接执行,而是当发送到一定数量或满足一次条件后,再由MySQL执行多条SQL指令。

    由程序将SQL指令发送到MySQL,并执行,其执行效率存在的问题可能有:

    1. 程序可能是运行在应用服务器上的,例如运行在Tomcat服务器上,而MySQL可能是专门的服务器,即程序和MySQL并不在同一台服务器上,每次需要执行SQL指令时,首先需要建立与MySQL服务器的连接,才可以将SQL指令传送到MySQL服务器,甚至,即使使用的是同一台服务器,这个连接、传送的过程依然是存在的!通过批处理的做法可以进行优化,即:只用建立1次连接,就可以传送100甚至1000甚至更多条SQL语句,从而大大的减少连接次数!

    2. 当SQL指令送达MySQL服务器后,在执行之前,还必须经过编译、解释、词法分析、语义分析等过程,才可以被执行!所以,如果使用1条SQL语句插入10条数据,肯定比循环10次却每次插入1条数据的效率要高得多!

    所以,如果是1000万次的循环,每次插入1条数据,问题就出在:需要建立1000万次连接MySQL的过程,并需要在执行之前检查1000万条SQL指令!

    解决方案中的第1点肯定是使用批处理的做法,减少连接次数!第2点就是使用同1条SQL指令插入多条数据,则可以减少编译、分析的次数!所以,最终的解决方案可以是循环100次,每次都是1个批处理,每个批处理中发送100条SQL指令,每个SQL指令插入1000条数据。

  • 相关阅读:
    python 全栈开发,Day75(Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件)
    python 全栈开发,Day73(django多表添加,基于对象的跨表查询)
    python 全栈开发,Day72(昨日作业讲解,昨日内容回顾,Django多表创建)
    bootstrap源码里的function加上了+号
    php get set方法深入理解
    20160519
    NetStatusEvent info对象的状态或错误情况的属性
    php 代码大全
    常见HTTP状态(304,200等)
    php strtotime 和 date 日期操作
  • 原文地址:https://www.cnblogs.com/cgy-home/p/11080628.html
Copyright © 2011-2022 走看看