重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
首先要区分具体情况,虽然表里有几百万几千万的数据量,但是update是同时update这几百万条的数据呢?还是只更新其中某几条? 更新的数据量不同,解决方案自然也就有差异。同时update几百万数据,这个sql的性能影响在于数据库会做回滚段,以便异常时rollback。由于数据量大,性能就浪费在回滚段上了。 所以有2个方案供参考:
芦山网站建设公司创新互联建站,芦山网站设计制作,有大型网站制作公司丰富经验。已为芦山1000+提供企业网站建设服务。企业网站搭建\成都外贸网站建设公司要多少钱,请找那个售后服务好的芦山做网站的公司定做!
1. update时 ,禁用回滚段的生成,跟你前面说的nologing应该是一个意思
2. 分批更新,比如每更新10W条数据,就执行一次commit,这样效率也会比原来的要快。
操作步骤如下:
准备数据:在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,至此数据导入成功。
1、创建测试表,
createtabletest_date(idnumber,valuedate);
2、插入测试数据
insertintotest_datevalues(1,sysdate);
insertintotest_datevalues(2,sysdate-100);
insertintotest_datevalues(3,sysdate-55);
commit;
3、查询表中全量数据,selectt.*,rowidfromtest_datet;
4、编写sql,更新date类型的value字段值为:2010-12-14;
updatetest_datesetvalue=to_date('2010-12-14','yyyy-mm-dd')whereid=3;
commit;
5、再次查询sql,可以发现id为3的value值已变化;selectt.*,rowidfromtest_datet;