插入数据时的优化
批量插入
一次性插入的500到1000条是比较合适的, 不建议一次性插入超过一千条.
如果要插入几万条呢?
可以将其, 分割为多条SQL语句:
建议手动提交事务
多条插入语句时, 建议先开启事务, 将多条插入语句作为一个事务提交.
建议主键顺序插入
比起主键乱序, 性能要好的多.
大批量插入数据
例如说, 有一个业务要插入上百万, 上千万的数据记录.
此时使用insert的性能就太低了, 此时可以使用MySQL数据库提供的load指令进行插入, 操作如下:
左侧就是原始的磁盘文件结构, 右侧就是load进来之后的表
说明, 符合一定规则的文件, 不一定时逗号, 可以时冒号, 等等
演示:
客户端连接服务端时, 加上参数 --local-infile -u root -p
mysql --local-infile -u root -p
设置全局参数local_infile为1, 开启从本地加载文件导入数据的开关
set global local_infile = 1;
执行load指令将准备好的数据, 加载到表结构中
load data local infile '/root/sql1.log' into table 'tb_user' fields terminated by ',' lines terminated by '\n';
主键优化
数据组织方式
在InnoDb存储引擎中, 表数据都是根据主键顺序组织存放的, 这种存储方式的表称为索引组织表.
对于聚集索引来说, 下面存放的是, 表的行数据.
如果主键乱序插入, 可能会出现页分裂现象
有页分裂就有页合并