⾯试题-批量向MySQL导⼊1000万条数据有什么⽅法?
批量向MySQL导⼊数据
1. 直接导⼊
2. 使⽤存储过程循环拼接
contextualize是什么意思3. 使⽤load data infile
4. 修改ENGINE=InnoDB为MyISAM(v
5.1之前是MyISAM,之后是InnoDB)
5. 减少IO次数
6. SQL写法优化(⼀条SQL语句插⼊多条数据)
7. 合理设置批量⼤⼩(在事务中进⾏插⼊处理,不要⼀条数据提交⼀次,肯定要分批处理)
8. 尽量顺序插⼊(减少索引的维护压⼒)
mysql面试题sql
9. 合并事务+事务+有序数据的优化插⼊⽅式
10. 注意SQL批量插⼊的⼤⼩必须合理
11. 事务执⾏时间不要太长
12. 合理设置MySQL相应配置参数,增加缓存或减少不必要⽇志磁盘读写
html个人网页制作步骤合并SQL语句
⼀条SQL插⼊⼀条数据
insert into tb1(id,name,age,sex)values(1,'khue',25,'m');
insert into tb1(id,name,age,sex)values(2,'green',24,'w');
jsp page对象⼀条SQL插⼊多条数据
insert into tb1(id,name,age,sex)values(1,'khue',25,'m'),(2,'green',24,'w');
合并SQL语句能够提⾼程序的插⼊效率(原因在于合并后⽇志量减少了,降低⽇志刷盘的数据量和频率),也能减少SQL语句解析的次数,减少⽹络传输的IO
在事务中插⼊处理
将插⼊修改为
start transaction;
insert into tb1(id,name,age,sex)values(1,'khue',25,'m');
insert into tb1(id,name,age,sex)values(2,'green',24,'w');
commit;
在事务中可以提⾼数据的插⼊效率,因为在进⾏⼀个insert操作时,MySQL内部会建⽴⼀个事务,在事务内才能进⾏真正的插⼊处理操作,这样可以减少创建事务的消耗,让所有插⼊都在执⾏后才进⾏提交操作
数据有序插⼊
数据有序插⼊是指插⼊记录在主键上是有序排列
⽆序插⼊:
insert into tb1(id,name,age,sex)values(3,'joo',26,'m');
insert into tb1(id,name,age,sex)values(5,'green'25,'w');
insert into tb1(id,name,age,sex)values(1,'khue',25,'m');
有序插⼊:
insert into tb1(id,name,age,sex)values(1,'khue',25,'m');
insert into tb1(id,name,age,sex)values(3,'joo',26,'m');bold是什么字体
insert into tb1(id,name,age,sex)values(5,'green'25,'w');
由于数据库在插⼊时,需要维护索引数据,⽆序的记录会增⼤维护索引的成本(参照innodb使⽤的B+tree索引,如果每次插⼊记录都在索引的最后⾯,索引的定位效率很⾼,并且对索引调整较⼩;如果插⼊的记录在索引中间,则需要B+tree进⾏分裂合并等操作,会消耗⽐较多的计算资源,并且插⼊记录的索引定位效率会下降,数据量较⼤时会有频繁的磁盘操作)
测试
合并数据+事务的⽅法在较⼩数据量时,性能提⾼很明显;数据量较⼤时(1000万以上),性能急剧下降,因为此时数据量超过了
innodb_buffer的容量,每次定位索引涉及较多的磁盘读写操作;使⽤合并数据+事务+有序数据则表现良好,因为有序数据索引定位较为⽅便,⽆需频繁对磁盘进⾏读写操作
注意:
mayiseeit英语怎么读1. SQL语句是有长度限制的,在合并数据时,不能超过SQL长度限制(通过max_allowed_packet配置可以修改,默认1M)
2. 事务也需要控制⼤⼩,事务过⼤会影响执⾏效率(MySQL有innodb_log_buffer_size配置项,超过值会把innodb数据刷到磁盘,此
时效率会有所下降)
参考:
1.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论