
1、alter table tb nologging --若是归档模式下,将表设置为不记录日志
2、drop index index_name--若表上有index,先删除表上的index
3、insert /+append/ into tb --执行插入
4、create index index_name on --重建index
5、alter table tb logging --回复日志记录功能
你首先确定是否用上了索引,你可以再网上搜下sql server的一些系统调优函数,我知道sybase数据库有个sp_showplan id,null,null,null 就可以看出那些使用了索引,那么定义了索引但是没被使用,一般用上了正确的索引如果还是10分钟的,那么在怎么优化都提高不了很多了,300万数量的表除了必要的索引外其他索引可以干掉,因为insert,delete每次 *** 作都要对索引也要 *** 作,修改索引本身要比你插值和删除要花费的时间多多了
你insert这个表如果数据不多,不应该有10分钟,delete因为要关联可能会有10分钟左右,如果你以上都 *** 作了,可以考虑是否是索引坏了,重建下索引,最好先清下日志,防止日志满
常用的插入语句如:
INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`)
VALUES ('0', 'userid_0', 'content_0', 0);
INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`)
VALUES ('1', 'userid_1', 'content_1', 1);
修改成:
INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`)
VALUES ('0', 'userid_0', 'content_0', 0), ('1', 'userid_1', 'content_1', 1);
修改后的插入 *** 作能够提高程序的插入效率。这里第二种SQL执行效率高的主要原因是合并后日志量(MySQL的binlog和innodb的事务让日志)减少了,降低日志刷盘的数据量和频率,从而提高效率。通过合并SQL语句,同时也能减少SQL语句解析的次数,减少网络传输的IO。
SQL语句是有长度限制,在进行数据合并在同一SQL中务必不能超过SQL长度限制,通过max_allowed_packet配置可以修改,默认是1M,测试时修改为8M。
以上就是关于如何提高Oracle数据库的插入速度全部的内容,包括:如何提高Oracle数据库的插入速度、sql server insert 与 delete 三百万级数据量时速度极慢,有10分钟左右,求高手如何解决、mysql插入1000条数据到数据表中如何能加快速度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)