首先要区分具体情况,虽然表里有几百万几千万的数据量,但是update是同时update这几百万条的数据呢?还是只更新其中某几条? 更新的数据量不同,解决方案自然也就有差异。同时update几百万数据,这个sql的性能影响在于数据库会做回滚段,以便异常时rollback。由于数据量大,性能就浪费在回滚段上了。 所以有2个方案供参考:
成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、成都网站制作、成都外贸网站建设、武穴网络推广、微信小程序开发、武穴网络营销、武穴企业策划、武穴品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联为所有大学生创业者提供武穴建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
1. update时 ,禁用回滚段的生成,跟你前面说的nologing应该是一个意思
2. 分批更新,比如每更新10W条数据,就执行一次commit,这样效率也会比原来的要快。
方法一:
采用存储过程,使用循环,限制更新的条数,效率不是很高。。
方法二:
建立和目标表一样的结构的临时表(基于事务的临时表,保证主键一样),使用视图更新的操作。
update( select a.A列,b.A列 from t1 a,temp_t1 b where a.id=b.id) set a.A列=b.A列
方法三:
同样的使用临时表,根据插入产生的日志少于update的日志的办法,使用
truncate table t1;
create table t1 as select * from temp_t1;
工具/材料
ORACLE SQL Developer
01
首先我们打开ORACLE SQL Developer工具,来看一下我们接下来要操作的表的结构,如下图所示
02
然后先执行的是数据的插入操作,在ORACLE中,插入数据用insert语句,如下图所示
03
如果查询数据就需要使用select语句了,如下图所示,运用select语句的时候可以指定列名
04
接下来看一下如何更新数据,在Oracle中更新数据可以运用update语句,如下图所示,更新的时候需要限定更新条件
05
在进行更新的时候,如果你没有指定更新条件的话,那么就会进行全表数据的更新,如下图所示
06
接下来看一下数据的删除操作,删除操作运用delete语句即可,需要通过where条件指定删除哪些数据,如下图所示
07
最后要提醒大家,如果进行删除的时候不指定where条件的话,就会把整张表的数据都删除掉了,如下图所示
1、创建测试表,
create table test_date(id number, value date);
2、插入测试数据
insert into test_date values(1,sysdate);
insert into test_date values(2,sysdate-100);
insert into test_date values(3,sysdate-55);
commit;
3、查询表中全量数据,select t.*, rowid from test_date t;
4、编写sql,更新date类型的value字段值为:2010-12-14;
update test_date set value = to_date('2010-12-14','yyyy-mm-dd') where id = 3;
commit;
5、再次查询sql,可以发现id为3的value值已变化; select t.*, rowid from test_date t;
操作步骤如下:
准备数据:在excel中构造出需要的数据
2.将excel中的数据另存为文本文件(有制表符分隔的)
3.将新保存到文本文件中的数据导入到pl*sql中
在pl*sql中选择tools--text
importer,在出现的窗口中选择"Data
from
Textfile",然后再选择"Open
data
file",
在弹出的文件选择框中选中保存有数据的文本文件,此时将会看到data
from
textfile中显示将要导入的数据
4.在configuration中进行如下配置
注:如果不将"Name
in
header"勾选上会导致字段名也当做记录被导入到数据库中,从而导致数据错误
5.点击data
to
oracle,选择将要导入数据的表,并在fields中将文本中的字段与表中的字段进行关联
6.点击import按钮进行导入
7.查看导入的数据
OK,至此数据导入成功。