标准update语法 单表更新或较简单的语句采用使用此方案更优。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了标准update语法 单表更新或较简单的语句采用使用此方案更优。相关的知识,希望对你有一定的参考价值。

然后试了下,select的时候用select + where + order by + limit的方法,where和order by都是用time去处理,跑了一下,十来分钟就搞定了。后面想想,where和order by的时候用表的主键去处理,应该会快点,然后就试了一下,哇塞,效果很明显,select + where + order by + limit的方法(用主键去处理where 和order by) ,一分钟就处理完了所有数据。取一次数据,处理完数据后,插入一次数据,可以根据自己的数据量大小,适当调整一次要select多少条数据出来。记住,select出来后,处理完,一次性插入新表,不要一条条插入!

最终结果,用select + where + order by + limit的方法(用主键去处理where 和order by) ,一分钟左右就处理完了五百万条左右的数据,有好几张表,其中有两张表都各有一两百万条的数据,而最初的那种逐条update的方法,预计得十个小时以 上。虽然几经波折,最后终于放心地交差了。

------------------------------------------------------------------------------------------------------------------------------------------------

UPDATE T_TEST A SET A.MANA_CODE = (

SELECT MANA_CODE FROM T_TEST2 B WHERE A.APPLY_NO = B.APPLY_NO

)

WHERE EXISTS(
SELECT '1' FROM T_TEST2 C WHERE A.APPLY_NO = C.APPLY_NO
--这条语句执行10多分钟都没反应。T_TEST2表只有300多条记录,T_TEST表却有6万多条数据。很明显主表数据有点多,应该给主表添加条件减少数据量!
)

WITH UR;

-------------------------------------------------------------------------------------------------------------------------------------------------

 MERGE INTO INTF_CMS_CALLUSER_TPYE A --(目标表)
  USING  CMS.SERV_BASE_MSG B
  ON (A.OBJECT_ID = B.PROD_ID)
  WHEN MATCHED THEN
    UPDATE SET A.LATN_ID = B.LATN_ID;

执行一下,6秒钟执行成功,这下大部分筒子应该都能接受吧

这个优化过程生产过程中很实用,但是要注意的是,创建索引是关键(在关联字段上的索引),merge的执行原理大家可以查阅相关资料去详细了解一下,我的博文也有相关的介绍。另外不同的Oracle版本merge的写法支持程度不一样,9i之前的版本是不支持merge的,9i才引入merge,但是9i版本是不支持单独的update的,必须要有insert的写法才算完整。

------------------------------------------------------------------------------------------------------------------------------------------
标准update语法
单表更新或较简单的语句采用使用此方案更优。
inline view更新法
两表关联且被更新表通过关联表主键关联的,采用此方案更优。
merge更新法
两表关联且被更新表不是通过关联表主键关联的,采用此方案更优。
快速游标更新法
多表关联且逻辑复杂的,采用此方案更优。
------------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------------

参考技术A 看数据量大数据量情况下 or 的效率 应该 比 in 高应该 也比 循环 高不过最好自己做个测试

以上是关于标准update语法 单表更新或较简单的语句采用使用此方案更优。的主要内容,如果未能解决你的问题,请参考以下文章

MySQL基础:DML语句总结

单表的更新UPDATE和删除记录DELETE

mysql中的update语句怎么写

mysql单表操作

SQLDML语句-SQL更新与删除:单表更新删除与连表更新删除语法

[转]Oracle的update语句优化研究