最近学习StarRocks,需要验证从MySQL进行数据迁移的难易度、DataX在其中的运用以及两者的性能对比等。...采用大量的数据模拟正式环境挑战MySQL的性能瓶颈才能使对比效果更清晰更有说服力。 ...创建数据时采用了 存储过程 和 先用Java生成sql文件再使用MySQL客户端工具导入 两种方式,这两种方式速度差异巨大。...1、采用的表结构如下: drop table if exists person; create table person ( id integer primary key auto_increment...default 9.9 comment '零钱', birthday datetime default current_timestamp comment '生日' ); 2、使用存储过程插入
前言 在开发过程中我们不管是用来测试性能还是在生产环境中页面展示好看一点, 又或者学习验证某一知识点经常需要一些测试数据, 这个时候如果手敲的话, 十行二十行还好, 多了就很死亡了, 接下来介绍两种常用的...MySQL测试数据批量生成方式 存储方式+函数 Navicat的数据生成 一、表 准备了两张表 角色表: id: 自增长 role_name: 随机字符串, 不允许重复 orders: 1-1000...NULL COMMENT '排序权重\r\n', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 二、使用函数生成 通过存储过程快速插入...例如角色名称, 选择了 职位名称 还可以进行是否包含 null 的选择等 但是如果是 姓名 那么就会让你选择是否唯一 数字的话会让你选择范围, 默认值等 等确定好了, 我们就可以点击右下角进行生成随机测试数据...通过结果可以看到生成十一万测试数据一共用时十一秒, 比第一种方法速度快很多, 推荐使用
我们日常做一些MySQL测试的时候,经常要造数据,通常就写个循环插入数据的存储过程。前两天碰巧看文章说,mysql_random_data_load程序能向MySQL随机插入大量数据,于是了解一下。...(1)); 执行指令,6秒插入10万数据, -bash-4.2$ ..../mysql_random_data_load -h127.0.0.1 -u用户名 -p密码 --max-threads=2(线程数) 数据库名称 表名 100000(插入数据量) INFO[2021-...c1列有20个值,数据比较分散, 还是能满足基本的测试数据要求的,操作简单,基本的数据类型都可以支持,空值、外键这些特殊的场景,也都能支持,不错的开源工具,推荐一下。...《小白学习MySQL - 变通创建索引的案例一则》 《小白学习MySQL - “投机取巧”统计表的记录数》 《小白学习MySQL - 一次慢SQL的定位》 《小白学习MySQL - TIMESTAMP类型字段非空和默认值属性的影响
应用场景之一:有时,我们需要创建表并填充大量测试数据。 方法如下: 我们先来新建一个表,创建两个普通索引。...10w 测试数据,如果对 MySQL 的存储过程不熟悉,请看我在代码中的注释,应该能看得懂得。...#定义分割符号,mysql 默认分割符为分号;,这里定义为 // #分隔符的作用主要是告诉mysql遇到下一个 // 符号即执行上面这一整段sql语句 delimiter // #创建一个存储过程,并命名为...分隔符为; call testData(); #调用存储过程 数据插入完成!...备注:个人开发机上会需要比较长的时间,预计15分钟左右【个人电脑】
背景 在进行查询等操作的验证时,我们经常需要在线下环境构建大量的基础数据供我们测试,模拟线上的真实环境。 构建数据 这里我们快速构建一份测试数据,用来模拟实际生产中量级在100万的一张数据表。...创建内存表 利用 MySQL 内存表插入速度快的特点,我们先利用函数和存储过程在内存表中生成数据,然后再从内存表插入普通表中。...创建存储过程 创建插入数据的存储过程 MySQL [dts_demo]> CREATE DEFINER=`root`@`%` PROCEDURE `add_user_memory`(IN n int)...min 50.74 sec) 生产100万测试数据用时50秒,还是比较效率的。...打乱创建时间 更新创建时间字段让插入的数据的创建时间更加随机 MySQL [dts_demo]> UPDATE user_info SET create_time=date_add(create_time
总不能让我去线上去测试吧,会被DBA砍死的 创建测试数据的方式 1. 编写代码,通过代码批量插库(本人使用过,步骤太繁琐,性能不高,不推荐) 2....临时数据表方式执行 (本文实现方式2,强烈推荐该方式,非常简单,数据插入快速,100W,只需几秒) 4....内存表插入速度快的特点,我们先利用函数和存储过程在内存表中生成数据,然后再从内存表插入普通表中 CREATE TABLE `t_user_memory` ( `id` int(11) NOT NULL...,我使用64M内存,插入了22W数据,看情况改,不过这个值不要太大,默认32M或者64M就好,生产环境不要乱尝试 从内存表插入普通表 mysql> INSERT INTO t_user SELECT *...以临时表为基础数据,插入数据到t_user中,100W数据插入需要10.37s mysql> INSERT INTO t_user -> SELECT -> id,
1、生成思路 利用mysql内存表插入速度快的特点,先利用函数和存储过程在内存表中生成数据,然后再从内存表插入普通表中 2、创建内存表及普通表 CREATE TABLE `vote_record_memory...根据电脑性能不能所花时间不一样,大概时间在小时级别,如果报错内存满了,只在修改max_heap_table_size 个参数即可,win7修改位置如下,linux,修改my.cnf文件,修改后要重启mysql...5、插入普通表中 INSERT into vote_record SELECT * from vote_record_memory ? ?
B+树插入和查询的性能和B+树层数直接相关,2000W以下是3层索引,而2000w以上则可能为四层索引。 Mysql b+索引的叶子节点每页大小16K。...无需再并发写入单表 MySQL存储引擎的选择 Myisam 比innodb有更好的插入性能,但失去了事务支持,批量插入时无法保证同时成功或失败,所以当批量插入超时或失败时,如果重试,势必对导致一些重复数据的发生...并且在innodb关闭即时刷新磁盘策略后,innodb插入性能没有比myisam差太多。 innodb_flush_log_at_trx_commit: 控制MySQL刷新数据到磁盘的策略。...线上环境测试时可以重点对比两者的插入性能。 要不要进行分库 mysql 单库的并发写入是有性能瓶颈的,一般情况5K TPS写入就很高了。 当前数据都采用SSD 存储,性能应该更好一些。...MySQL innodb、myisam 存储引擎对写入性能支持不同,也要在线上对比验证 数据库批量插入的最佳阈值需要反复测试得出。
B+树插入和查询的性能和B+树层数直接相关,2000W以下是3层索引,而2000w以上则可能为四层索引。 Mysql b+索引的叶子节点每页大小16K。...是否需要并发写同一个表 不能 1、 并发写同一个表无法保证数据写入时是有序的; 2、 提高批量插入的阈值,在一定程度上增加了插入并发度无需再并发写入单表; MySQL存储引擎的选择 Myisam比innodb...有更好的插入性能,但失去了事务支持,批量插入时无法保证同时成功或失败,所以当批量插入超时或失败时,如果重试,势必对导致一些重复数据的发生。...并且在innodb关闭即时刷新磁盘策略后,innodb插入性能没有比myisam差太多。 innodb_flush_log_at_trx_commit: 控制MySQL刷新数据到磁盘的策略。...线上环境测试时可以重点对比两者的插入性能。 要不要进行分库 mysql 单库的并发写入是有性能瓶颈的,一般情况5K TPS写入就很高了。 当前数据都采用SSD 存储,性能应该更好一些。
往期专题请查看www.zhaibibei.cn 这是一个坚持Oracle,Python,MySQL原创内容的公众号 前面说了MySQL Linux平台和Windows平台的安装 下面开始是MySQL的一些学习笔记...首先学习其中的一些命令和特性我们需要有数据 今天的内容即为如何构造一些数据 环境为MySQL 5.7.25 1....速度对比 最后我们简单的对比下2个存储引擎插入的速度 ? ? 可以看出innodb引擎的插入效率远高于MyISAM引擎 好了今天就写到这,下次再说其他的内容 5....参考资料 http://www.kkh86.com/it/mysql-adv/guide-index-mock-data.html 可点击阅读原文获得更好的阅读体验,推荐在PC端阅读 也可在公众号内回复...MySQL测试数据的构造 搜索相关内容 或直接打开个人网页搜索 http://www.zhaibibei.cn 往期专题包括: Python 自动化运维 打造属于自己的监控系统 Python爬虫基础
实现方案 基于MySQL数据库,实现方案有如下4种 replace into 使用最简单,推荐 on duplicate key update 可以根据业务需要,当数据重复时,指定更新的内容。...否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。...insert select,这种用法并不一定要求列名匹配,事实上,MYSQL甚至不关心select返回的列名,它需要的是列的位置。...前两种形式用的多些。其中 “into” 关键字可以省略,不过最好加上 “into”,这样意思更加直观。另外,对于那些没有给予值的列,MySQL 将自动为这些列赋上默认值。...,不需要插入数据的表必须有主键或者是唯一索引。
来源:http://www.telami.cn/2018/when-mysql-batch-inserts-and-how-to-not-insert-duplicate-data/ 温故而知新 业务很简单...:需要批量插入一些数据,数据来源可能是其他数据库的表,也可能是一个外部excel的导入 那么问题来了,是不是每次插入之前都要查一遍,看看重不重复,在代码里筛选一下数据,重复的就过滤掉呢?...user (name) SELECT 'telami' FROM dual WHERE NOT EXISTS (SELECT id FROM user WHERE id = 1) 这种方法其实就是使用了mysql...Mybatis,批量插入的一个操作,mobile_number已经加了唯一约束。...这样在批量插入时,如果存在手机号相同的话,是不会再插入了的。
业务很简单:需要批量插入一些数据,数据来源可能是其他数据库的表,也可能是一个外部excel的导入 那么问题来了,是不是每次插入之前都要查一遍,看看重不重复,在代码里筛选一下数据,重复的就过滤掉呢?...id 这种方法有个前提条件,就是,需要插入的约束,需要是主键或者唯一约束(在你的业务中那个要作为唯一的判断就将那个字段设置为唯一约束也就是unique key)。...user (name) SELECT 'telami' FROM dual WHERE NOT EXISTS (SELECT id FROM user WHERE id = 1) 这种方法其实就是使用了mysql...Mybatis,批量插入的一个操作,mobile_number已经加了唯一约束。...这样在批量插入时,如果存在手机号相同的话,是不会再插入了的。
业务很简单:需要批量插入一些数据,数据来源可能是其他数据库的表,也可能是一个外部excel的导入 那么问题来了,是不是每次插入之前都要查一遍,看看重不重复,在代码里筛选一下数据,重复的就过滤掉呢?...user (name) SELECT 'telami' FROM dual WHERE NOT EXISTS (SELECT id FROM user WHERE id = 1) 这种方法其实就是使用了mysql...Mybatis,批量插入的一个操作,mobile_number已经加了唯一约束。...这样在批量插入时,如果存在手机号相同的话,是不会再插入了的。...来源:http://www.telami.cn/2018/when-mysql-batch-inserts-and-how-to-not-insert-duplicate-data/
Mysql 插入数据的三种方式 #插入数据 insert into 表名 values(值) #主键重复时忽略 insert ignore into 表名 values(值) #主键或unique索引重复时替换...replace into 表名 values(值) 【注】 ①replace执行结果影响行数是被删除和新添加的行数之和,即:如果有1行重复,影响行数为2;插入一行没有重复的,影响行数为1; ②replace...插入部分字段不成功 select结果插入到表 insert into 表名1 (select * from 表名2)
**导读** > 作者:杨漆 > 16年关系型数据库管理,从oracle 9i 、10g、11g、12c到Mysql5.5、5.6、5.7、8.0 到TiDB获得3个OCP、2个OCM;运维路上不平坦...干货: 一般情况下mysql在百万级数据时读取、插入、更新速度较快,客户体验良好,但到了两千万级以上就会出现很慢 解决案例:将MySQL插入速度从2000条/分钟 提高到 12000条/秒。...核心思想: 1、尽量使数据库一次性写入Data File 2、减少数据库的checkpoint次数 3、程序上尽量缓冲数据,进行批量式插入与提交 4、减少系统的IO冲突 1. innodb_flush_log_at_trx_commit...避免频繁自动扩展Data File导致 MySQL 的checkpoint 操作) 3. innodb_log_buffer_size 从8M修改为16M (根据1秒钟内的事务量情况 适度增大,太大会浪费...3840000 rows affected (7 min 59.21 sec) Records: 3840000 Duplicates: 0 Warnings: 0 结果:完成了以上修改操作后;384万行数据的插入速度从
最近一直忙着处理原来老项目遗留的一些SQL优化问题,由于当初表的设计以及字段设计的问题,随着业务的增长,出现了大量的慢SQL,导致MySQL的CPU资源飙升,基于此,给大家简单分享下这些比较使用的易于学习和使用的经验...再说之前我先根据我最近的经验说下我对索引的看法,我觉得并不是所以的表都需要去建立索引,对于一些业务数据,可能量比较大了,查询数据已经有了一点压力,那么最简单、快速的办法就是建立合适的索引,但是有些业务可能表里就没多少数据...,或者表的使用频率非常不高的情况下是没必要必须要去做索引的。...下面是我此次测试使用的一张表结构以及一些测试数据 CREATE TABLE `user` ( `id` int(5) unsigned NOT NULL AUTO_INCREMENT, `create_time...name、sex、age,你现在的查询顺序是sex、age、name,这肯定不走索引啊,你要是自己没测试过,也有这种不成熟的想法,那跟我一样还是太年轻了,它其实跟顺序是没有任何关系的,因为mysql的底层会帮我们做一个优化
文章目录 一、数据库表结构 1、moduleRole(中间表) 2、roleInfo表 3、moduleInfo表 二、带条件插入的代码如下: 一、数据库表结构 1、moduleRole(中间表)...2、roleInfo表 3、moduleInfo表 上面roleInfo与moduleInfo表是多对多关系,所以引入中间表moduleRole,用两个一对多实现多对多关系 二、带条件插入的代码如下...: 向中间表moduleRole插入数据,限制条件为角色编号roleId=3,并且该角色的可操作菜单编号为1-0和1-1 代码如下: insert into moduleRole(roleId,moduleCode
explicit_defaults_for_timestamp MySQL 5.6版本引入 explicit_defaults_for_timestamp 来控制对timestamp NULL值的处理...如果该参数不开启,则对timestamp NOT NULL插入NULL值,不报错,无warning,插入后的值为当前时间 如果在my.cnf中explicit_defaults_for_timestamp...=1 那么插入该值的时候会报错提示该列can not be null 建议开启该值 mysql> show variables like '%explicit_defaults_for_timestamp...-26 11:44:24 | +---------------------+ 1 row in set (0.03 sec) 可以看到 explicit_defaults_for_timestamp 插入的...NULL不报错,且也插入了当前的时间 explicit_defaults_for_timestamp = 1 insert into helei(t1,t2,t3) values(null,null,null
MySQL的批插入 BULK INSERT和load data的速度差不多,并且可靠。...NAME VARCHAR(10)) insert into test values(1,'aa'),(2,'bb'),.....(100000,'bb'); 也就是每个记录间用逗号隔开,最后用分号结束,插入
领取专属 10元无门槛券
手把手带您无忧上云