最近发现蝉知的全文检索不是用的第三方类似于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使用存储过程批量插入百(千)万测试数据相关推荐

  1. mysql利用存储过程批量插入一千万数据(半小时)

    示例: 向user表中插入一千万条数据,其中user_id11位手机号随机,可以重复:age为18-27之间:count随机金额,八位小数:status二百万数据为1,八百万数据为0. -- 如果该名 ...

  2. mysql利用存储过程批量插入数据

    -- 如果存在此存储过程则删掉 DROP PROCEDURE IF EXISTS proc_initData; -- 定好结束符为"$" DELIMITER $ -- 创建 CRE ...

  3. Mysql通过存储过程批量插入数据

    创建表 DROP TABLE if exists employees_partition; CREATE TABLE if not exists `employees_partition` (`id` ...

  4. MySQL使用存储过程批量插入数据

    # 1. 创建学生表和课程表 create table `student_info`( `id` int(11) not null auto_increment, `student_id` int n ...

  5. mysql测试数据100w_利用MySQL存储过程批量插入100W条测试数据

    这里将告诉您利用MySQL存储过程批量插入100W条测试数据,具体完成步骤:DROP PROCEDURE IF EXISTS insert_batch; CREATE PROCEDURE insert ...

  6. Mysql脚本循环批量插入数组数据

    Mysql脚本循环批量插入数组数据 涉及到Mysql知识点 脚本研究背景 Mysql完整脚本 ·首次写博客,不知道说点啥,直接上点干货,希望大家指出不足之处,共同进步. 涉及到Mysql知识点 存储过 ...

  7. plsql 存储过程 批量提交_Oracle 存储过程批量插入数据

    oracle 存储过程批量插入大量数据 declare numCount number; userName varchar2(512); email varchar2(512); markCommen ...

  8. 个.十.百.千.万.亿.兆,后面是什么单位?

    我們常用的單位多是以下數個 百 .... 10^2 ...... 100 千 .... 10^3 ...... 1,000 萬 .... 10^4 ...... 10,000 億 .... 10^8 ...

  9. mysql如何高效批量插入数据

    mysql如何高效批量插入数据 1.一种可以再代码中循环着执行单条插入数据的语句,这种效率太差. insert into table ([列名],[列名]) values ([列值],[列值])); ...

最新文章

  1. 关于卡尔曼滤波和粒子滤波最直白的解释
  2. SAP QM 通过控制图 (Control Chart) 的实现提升企业质量管理水平
  3. MongoDB Sharding分片配置
  4. thinkphp mysql批量入库_ThinkPHP3.2框架使用addAll()批量插入数据的方法
  5. 在CentOS上安装Git
  6. IPTABLES封闭和开放端口
  7. 终端软件_DMSTerminal现场管控终端软件正式发布
  8. table加载动态数据(亲测)
  9. FreeBSD磁盘标签实例分析
  10. 推荐一款配置中心新贵:Nacos,阿里开源,是真的香!!
  11. [译] Promise A+ 标准
  12. 有史以来最容易理解的控制反转(IoC)与注入依赖(DI)
  13. manjaro pacman 使用方法总结
  14. java获取kafka topic
  15. sql server 2008 千万条数据分页查询
  16. 谈谈创业这点事(3)
  17. The Shawshank Redemption-19
  18. java培训出来的面试经历
  19. SimpleITK笔记本中ITK细分(Segmentation)介绍
  20. 藏拙的搜索引擎技术是2008年全宇宙最耀眼的搜索引擎技术吗?

热门文章

  1. QT中的视频显示优化
  2. java获取西瓜视频的下载地址
  3. ESP32+PIO+LGVL+gui_guider
  4. 【论文阅读】PatchmatchNet
  5. [Solved] Splunk: Cannot get username when all users are selected“
  6. Excel函数带你看透身份证号
  7. tensorflow的regress(超详细教程)
  8. Android常用的第三方开源库和框架
  9. 枫叶蓝代码生成工具 和对服装行业的一些感悟
  10. RV-LINK:将 GD32VF103C-START 开发板变成 RISCV-V 仿真器