MySQL使用存储过程批量插入百(千)万测试数据
最近发现蝉知的全文检索不是用的第三方类似于sphinx或xunsearch这样的全文检索组件,所以我本着好奇心测试了一下它的效率...
测试结果就不说了,主要说下折腾这1000万测试数据的过程
MySQL存储过程的创建
DELIMITER //CREATE PROCEDURE myproc(OUT s int)BEGINSELECT COUNT(*) INTO s FROM students;END//
DELIMITER;
具体使用网上找找资料吧,还是比较多的。
批量插入100万条测试数据
mysql> delimiter $$$
mysql> create procedure search()-> begin-> declare i int default 0;-> set i=0;-> start transaction;-> while i<1000000 do-> INSERT INTO `zt_searchindex` ( `objectType`, `objectID`, `title`, `content`, `addedDate`, `editedDate`) VALUES ('task', 35, ' 25968 21488', ' 25968 25454 24211', '2017-11-17 15:44:23', '2017-11-17 15:44:23');-> set i=i+1;-> end while;-> commit;-> end-> $$$
mysql> delimiter;
其中INSERT INTO
这一段根据自己的需求处理,我是给它加了一堆的一样的,内容比较长,这儿缩短了...
跑起来
call search();
用了9分钟... 好像还可以接受,但是其它有点慢。
适当的优化一下
- 设置 innodb_flush_log_at_trx_commit = 0 ,相对于 innodb_flush_log_at_trx_commit = 1 可以十分明显的提升导入速度;
- 使用 load data local infile 提速明显;
- 修改参数 bulk_insert_buffer_size, 调大批量插入的缓存;
- 合并多条 insert 为一条.
Myisam : 对于Myisam类型的表,可以通过以下方式快速的导入大量的数据。 ALTER TABLE tblname DISABLE KEYS;
loading the data ALTER TABLE tblname ENABLE KEYS;
这两个命令用来打开或者关闭Myisam表非唯一索引的更新。在导入大量的数据到一个非空的Myisam表时,通过设置这两个命令,可以提高导入的效率。对于导入大量数据到一个空的Myisam表,默认就是先导入数据然后才创建索引的,所以不用进行设置
Innodb : 对于Innodb类型的表,有以下几种方式可以提高导入的效率:
①因为Innodb类型的表是按照主键的顺序保存的,所以将导入的数据按照主键的顺序排列,可以有效的提高导入数据的效率。如果Innodb表没有主键,那么系统会默认创建一个内部列作为主键,所以如果可以给表创建一个主键,将可以利用这个优势提高导入数据的效率。
②在导入数据前执行SET UNIQUE_CHECKS=0
,关闭唯一性校验,在导入结束后执行SET UNIQUE_CHECKS=1
,恢复唯一性校验,可以提高导入的效率。
③如果应用使用自动提交的方式,建议在导入前执行SET AUTOCOMMIT=0
,关闭自动提交,导入结束后再执行SET AUTOCOMMIT=1
,打开自动提交,也可以提高导入的效率。
而我创建的是Innodb类型的表
所以稍微修改了一下
mysql> set session UNIQUE_CHECKS off;
mysql> set session AUTOCOMMIT off;
这样之后,我提交100万的数据就只用了差不多120秒左右...
然后我们将数据量改成了 1000万. 差不多 10分钟就跑完了。。。
至于蝉知的搜索情况,我就不多说了,有兴趣的可以试试...
MySQL使用存储过程批量插入百(千)万测试数据相关推荐
- mysql利用存储过程批量插入一千万数据(半小时)
示例: 向user表中插入一千万条数据,其中user_id11位手机号随机,可以重复:age为18-27之间:count随机金额,八位小数:status二百万数据为1,八百万数据为0. -- 如果该名 ...
- mysql利用存储过程批量插入数据
-- 如果存在此存储过程则删掉 DROP PROCEDURE IF EXISTS proc_initData; -- 定好结束符为"$" DELIMITER $ -- 创建 CRE ...
- Mysql通过存储过程批量插入数据
创建表 DROP TABLE if exists employees_partition; CREATE TABLE if not exists `employees_partition` (`id` ...
- MySQL使用存储过程批量插入数据
# 1. 创建学生表和课程表 create table `student_info`( `id` int(11) not null auto_increment, `student_id` int n ...
- mysql测试数据100w_利用MySQL存储过程批量插入100W条测试数据
这里将告诉您利用MySQL存储过程批量插入100W条测试数据,具体完成步骤:DROP PROCEDURE IF EXISTS insert_batch; CREATE PROCEDURE insert ...
- Mysql脚本循环批量插入数组数据
Mysql脚本循环批量插入数组数据 涉及到Mysql知识点 脚本研究背景 Mysql完整脚本 ·首次写博客,不知道说点啥,直接上点干货,希望大家指出不足之处,共同进步. 涉及到Mysql知识点 存储过 ...
- plsql 存储过程 批量提交_Oracle 存储过程批量插入数据
oracle 存储过程批量插入大量数据 declare numCount number; userName varchar2(512); email varchar2(512); markCommen ...
- 个.十.百.千.万.亿.兆,后面是什么单位?
我們常用的單位多是以下數個 百 .... 10^2 ...... 100 千 .... 10^3 ...... 1,000 萬 .... 10^4 ...... 10,000 億 .... 10^8 ...
- mysql如何高效批量插入数据
mysql如何高效批量插入数据 1.一种可以再代码中循环着执行单条插入数据的语句,这种效率太差. insert into table ([列名],[列名]) values ([列值],[列值])); ...
最新文章
- 关于卡尔曼滤波和粒子滤波最直白的解释
- SAP QM 通过控制图 (Control Chart) 的实现提升企业质量管理水平
- MongoDB Sharding分片配置
- thinkphp mysql批量入库_ThinkPHP3.2框架使用addAll()批量插入数据的方法
- 在CentOS上安装Git
- IPTABLES封闭和开放端口
- 终端软件_DMSTerminal现场管控终端软件正式发布
- table加载动态数据(亲测)
- FreeBSD磁盘标签实例分析
- 推荐一款配置中心新贵:Nacos,阿里开源,是真的香!!
- [译] Promise A+ 标准
- 有史以来最容易理解的控制反转(IoC)与注入依赖(DI)
- manjaro pacman 使用方法总结
- java获取kafka topic
- sql server 2008 千万条数据分页查询
- 谈谈创业这点事(3)
- The Shawshank Redemption-19
- java培训出来的面试经历
- SimpleITK笔记本中ITK细分(Segmentation)介绍
- 藏拙的搜索引擎技术是2008年全宇宙最耀眼的搜索引擎技术吗?
热门文章
- QT中的视频显示优化
- java获取西瓜视频的下载地址
- ESP32+PIO+LGVL+gui_guider
- 【论文阅读】PatchmatchNet
- [Solved] Splunk: Cannot get username when all users are selected“
- Excel函数带你看透身份证号
- tensorflow的regress(超详细教程)
- Android常用的第三方开源库和框架
- 枫叶蓝代码生成工具 和对服装行业的一些感悟
- RV-LINK:将 GD32VF103C-START 开发板变成 RISCV-V 仿真器