#Excel技巧# #数据库# #MySQL#

业务背景

不知道您在工作中有没有遇到过这样几种情况:

  1. 业务定期给你一批数据结构相同的名单或者数据,要求你插入到库里并进行处理。
  2. 机器学习指标加工时,一个数据库管理系统无法完成所有指标的加工,需要把DBMS1的数据导入到DBMS2中进行进一步加工。

上述两种场景都涉及到数据的批量插入问题,您是怎么做的?笔者在实际工作中经常遇到以上两种情况,经过一段时间摸索后,形成了一套利用Excel的固定的快速插入方法,与君分享。PS:这里不讨论数十万、数百万,甚至数亿条记录的插入,这种必须要用专用ETL和数据同步工具了,工作中遇到的多为大几千条,最多几万条数据的插入。

场景模拟

为了描述Excel在批量数据插入中的应用,我们继续利用《OVER窗口函数,好用的令人惊喜》一文中的场景,即定期批量插入学生的基本信息。

首先,在over_test库中在新建一张表,存储学生的基本信息,即学号和姓名。

create table over_test.student_base ( uid int not null primary key, name varchar(32) not null default 'Unknown' );

学校招生是全年招生,每个月都有一批学生入校,校长每个月都会给你一批学生名单,让你插入到学生基本信息表里进行管理,表样如下:

学生基本信息表样

利用Excel快速生成批量插入语句

假设有100名学生,拿到这个表你会怎么做呢,是一个一个写insert语句吗?现在是100个,要是1000个呢,估计要写到深夜了。那2000、3000、10000呢,OMG!

其实利用Excel很简单,在上面表样后面加一列,列名为SQL,使用Excel的公式即可快速生成插入语句,如下图所示:

Excel公式生成批量插入语句

SQL列的公式如下:

="insert into over_test.student_base(uid,name) values('"&A2&"','"&B2&"');"

这样只需要在第一行中写好公式,然后双击第一行右下角的十字星,就可以把所有插入语句都生成出来,然后拷到DBMS里面,就可以快速插入了。

然后,把这个Excel表保存下来形成模板,当有新的学生进来时,只要替换A列和B列,SQL列的内容就会自动填充了,这样模板化是不是很方便。

一种更高效的插入方法,你值得拥有

虽说上面的公式模板解决了插入语句批量生成的问题,但执行的时候会发现效率堪忧,区区100行数据的插入竟然需要8.98秒。尽管跟我的测试设备性能和秒表掐表手速有关系,但这个时间对于数据库来说还是太久了。

单条插入计时

之所以执行时间会很久,是因为上述模板中使用的公式是数据单条插入,而insert语句执行时会经过开始、认证、打开表、锁表、更新、提交、结束等耗时操作。上述情况下,每执行1条insert,就要进行一次复杂交互流程,100条就是100次,执行时间自然很长。

有一种插入方式是一次执行,全部插入,即使用(Mysql、Hive表中实验有效)

insert into over_test.student_base(uid,name) values

我是会说科技,关注我,一起聊聊数据、科技、安全、金融、IT那些琐事。

然后,在语句下面逐一列出需要插入的数据,这样就可以实现只执行一次复杂的交互便可以将所有数据一次性插入的目的,如下图所示:

一次执行,批量插入

知道了语句格式,我们的Excel模板公式应该怎么调整呢?调整如下:

=",('"&A2&"','"&B2&"')"

调整后的Excel模板

调整后把语句贴到values后面,记得把第一条的逗号去掉。我们再执行一次,看看执行时间是否会有变化:

批量插入执行时间

这种插入方法下,100条数据只需要0.1898秒,是单条插入的近50倍。1000条记录的执行时间,后者是0.6026秒,前者是1分30秒,前者与后者差了150倍,这说明随着数据条数的增多,单条插入和批量插入的效率差异会越来越大。

总结

本文介绍了一种利用Excel快速生成插入SQL语句的方法,同时对插入效率进行了优化,随算不上高级,但比较实用,适用于结构相同、插入频率按日计、数据量2W以内的数据处理,希望对您有所帮助。


我是会说科技,关注我,一起聊聊数据、科技、安全、金融、IT那些琐事。

excel 复制数据 sql server 粘贴_一个Excel妙招,一个SQL技巧,解决批量数据插入问题相关推荐

  1. excel 复制数据 sql server 粘贴_几百个Excel表格的内容要复制粘贴,如何一键自动化搞定?| 州的先生...

    点击关注州的先生 编程应用.实战教程,不容错过 在工作中经过会遇到大量格式一致,内容不同的Excel表格文件,需要将这里面的内容整理到一个Excel文件中的情形.一般情况下,都是将这些Excel表格文 ...

  2. excel 复制数据 sql server 粘贴_数据资料复制粘贴麻烦?教你硬盘对拷资料

    什么是硬盘对拷?其实也就是将硬盘的引导文件.启动BOOT.分区表.各类文件.资料等数据拷贝至另一个硬盘中,虽然其过程与复制粘贴有点类似,但实际并非是简单的复制粘贴.那么如何实现硬盘对拷?下面小编分享一 ...

  3. sql server死锁_如何使用扩展事件和SQL Server代理自动执行SQL Server死锁收集过程

    sql server死锁 介绍 (Introduction) This article is the last one of a series in which we discussed how to ...

  4. sql server 群集_部署具有群集共享卷SQL Server –第2部分

    sql server 群集 In the other article in this series: Deploy SQL Server for failover clustering with Cl ...

  5. sql server 部署_将程序包部署到SQL Server集成服务目录(SSISDB)

    sql server 部署 Starting with SQL Server 2012, Integration Services (SSIS) packages can now be deploye ...

  6. excel 复制数据 sql server 粘贴_win32 实现 excel 快速复制粘贴

    直接简明说:该方法可以直接将一张代码的区域内容直接 copy 到另一张表上,并且字体颜色.背景.格式都不变,另外还可以 copy 公式(相当于 excel 下拉公式) from win32com.cl ...

  7. 闪存驱动器怎么恢复数据?速速来get新妙招!

    案例:闪存驱动器损坏了怎么办?里面的数据还可以恢复吗? "急急急!!!前几天我在用U盘的时候,可能是由于不正确的插拔,或者是其他的原因,导致闪存驱动器损坏了.现在没有办法使用怎么办?里面有很 ...

  8. sql azure 语法_使用Azure Data Studio从SQL Server数据创建图表

    sql azure 语法 In this article, we will explore charts in an Azure Data Studio using data stored in SQ ...

  9. SQL SERVER 与ACCESS、EXCEL的数据导入导出转换

    * 说明:复制表(只复制结构,源表名:a 新表名:b)       select * into b from a where 1<>1 * 说明:拷贝表(拷贝数据,源表名:a 目标表名:b ...

最新文章

  1. form表单提交前进行ajax或js验证,校验不通过不提交
  2. ibm服务器的虚拟控制台,IBM Worklight 6.0 - 开发服务器/控制台问题
  3. 参数估计_数据分析|统计之一个总体参数估计(附代码)
  4. 网络主机托管的特点和优点_主机托管有哪些特点和优点
  5. OpenLayers 3 之 地图样式(ol.style)详解
  6. boost::statechart::in_state_reaction相关的测试程序
  7. django:资源网站汇总
  8. linux 常用工具
  9. wordpress footer置底
  10. python输入输出代码_python基本输入输出代码示例
  11. 如何仅对文档项目在ECB中应用自定义操作
  12. 对策《四川省本科毕业论文(设计)抽检实施细则》(二)专业能力
  13. aecmap快捷键_arcmap快捷键
  14. ftp工具绿色版,带你了解ftp工具绿色版是什么
  15. 远程连接基于VMware虚拟机的linux操作系统
  16. MySQL DBA技术难度低为什么工资比Oracle高?
  17. 今天来聊一下,俞敏洪把
  18. android动画特效
  19. vue 格式化数值方法
  20. linux命令mv作用,每天学一个 Linux 命令(18):mv

热门文章

  1. js获取年月日时分秒星期,并且动态展示时间
  2. three.js为正方体6个面加载不同纹理(and天空图的制作)
  3. Altium19在原理图中选中器件,PCB中对应器件飞到鼠标下,跟随鼠标,怎么解决?
  4. 【containerd 源码分析】containerd image pull 源码分析
  5. 程序员的三行代码情书!看完想找个程序员男朋友!
  6. Android集成Nets支付
  7. C++推箱子游戏(一)
  8. ATL7 1编写ActiveX控件
  9. clickhouse--join操作汇总【semi、anti、any、asof、global、colocate、cross】
  10. Python分析网易云音乐近5年热门歌单