1
xuanbg 2020-12-19 21:26:40 +08:00
楼主批量插入了解一下
|
2
LGA1150 2020-12-19 21:51:00 +08:00
是自增主键吗?
|
5
clrss 2020-12-19 22:41:10 +08:00
server 端 prepare stmt 用了么
|
6
ericbize 2020-12-19 22:52:59 +08:00 via iPhone
lz 是单次插入单条吗?
|
7
ZXCDFGTYU 2020-12-19 22:58:17 +08:00 1
数据如果不重要的话可以把表结构设计为 memory,然后 insert 的时候,可以拼接多个 value,但是不要拼接太多
|
8
johnsona 2020-12-19 22:59:59 +08:00
九浅一深
|
9
opengps 2020-12-19 23:09:26 +08:00
机械硬盘的话,换成 ssd 硬盘
单条单次写入的话,改为多次批量写入 写入随机时候,保持聚集索引列是递增状态的 |
10
wellsc 2020-12-19 23:11:58 +08:00
换 myrocks 引擎,插入贼快,查找就有点捉急
|
11
limuyan44 2020-12-19 23:26:18 +08:00
只是生成随机数据还有比存储过程快的吗
|
12
caiji11 OP @clrss 没有 这个对 效率影响很大么 用 jdbc 简单的 insert 不过 刚才试了下批量插入 作用好像不是很明显
|
19
ericls 2020-12-20 00:11:53 +08:00 via iPhone
去掉 constraint 和 index
|
20
foam 2020-12-20 01:00:43 +08:00 via Android 1
@caiji11 他的意思是,你直接在存储过程里写随机值插数据。我没用过,对该方法不表态。
另外,如果用的是 inodb,插入前可以将 innodb_flush_log_at_trx_commit 设置为 0,保证最快插入,处理完再设置回去(默认值是 1)。该参数为 0 时表示每次事务(注意每次插入就是一次事务的提交)写到 buffer 后就返回了,会有个线程异步去刷到日志和落磁盘。而 1 则落到磁盘才返回。 |
21
haosamax 2020-12-20 15:27:20 +08:00 via iPhone
change buffer
|
22
OldCarMan 2020-12-20 17:40:17 +08:00
@caiji11 个人猜测 楼上说的存储过程应该是类似这个( https://zhuanlan.zhihu.com/p/62626328 )的意思,不知道是不是你想要的。另外,自增主键存储过程中可以用 AUTO_INCREMENT,其他字段也想自增的话,可以使用序列。
|
23
YouLMAO 2020-12-20 22:30:31 +08:00 via Android
购买 spanner, 全球三地三中心三活
|
24
caiji11 OP @OldCarMan 我不是这样的 我用 java 做好逻辑判断之后拼接存入 因为日期处理 有点复杂 不过我发我的逻辑代码运行时间过长 也是问题
|
25
OldCarMan 2020-12-21 21:37:20 +08:00
@caiji11 我好奇,你用 java 这种方式批量导入随机数据的耗时是怎么样,我用我上面贴的例子,批量导入 20 万条(表结构 user(id,name,age))数据到我电脑虚拟机 mysql 容器花了 44 秒左右。
|
26
caiji11 OP @OldCarMan 很慢的 没有这么快 逻辑处理要耗费很多时间 做到可以自定义日期范围 以及一个表中几个日期之间的关系 如果没有自定义生成的话 出来的数据也不能用 主要考虑到这 所以没有用存储过程 用 go 会不会快些呢 哈哈
|
27
caiji11 OP @OldCarMan https://github.com/fcdml/MOCKSQL 工具地址 可以看看具体的实现
|