update乱用引起速度奇慢的问题
来源:互联网 发布:试客联盟 淘宝查不查 编辑:程序博客网 时间:2024/05/16 19:32
起因:
对SQL语句一直都是简单的应用,复杂的一般放到存储过程、应用程序中处理,但是由于要借用一批数据,临时用了个update语句,结果速度奇慢无比。
目标:
于是就下定决心,仔细分析。
环境:
oracle92数据库。
TEST_WORD(BIANHAO VARCHAR2(10) NOT NULL, XINGMING VARCHAR2(10))。
测试数据如下:
1000, ‘张三’;
1000-01, NULL(空白);
1001, ‘张三’;
1001-01, NULL(空白);
1002, ‘张三’;
1003-01, NULL(空白);
......大约一共有100万条数据
1000, ‘张三’;
1000-01, ‘张三’;
1001, ‘张三’;
1001-01, ‘张三’;
1002, ‘张三’;
1003-01, ‘张三’;
......最终结果SQL:
update test_word a set a.xingming=(
select xingming from test_word b
where b.xingming is not null
and substr(a.bianhao,1,4)=b.bianhao
)
update TEST_WORD a set a.XINGMING=(
select b.XINGMING from (select * from TEST_WORD where BIANHAO not like '%-01') b
where (b.BIANHAO||'-01')=a.BIANHAO
)
where exists (select XINGMING from (select * from TEST_WORD where BIANHAO not like '%-01') b
where (b.BIANHAO||'-01')=a.BIANHAO)
::成功
人品爆发后的SQL:
merge into TEST_WORD a
using (
select BIANHAO, XINGMING from TEST_WORD
where length(BIANHAO)=4
) b
on (substr(a.BIANHAO,1,4)=b.BIANHAO and length(a.BIANHAO)>4)
when MATCHED then
update set a.XINGMING=b.XINGMING
when NOT MATCHED then
insert values(b.BIANHAO, b.XINGMING)
merge语句在9i中必须既有when MATCHED then语句也必须有when NOT MATCHED then语句
但是在10g中就可以仅有when MATCHED then语句,或者仅有when NOT MATCHED then语句
感想:
中间过程其实挺纠结的。
- update乱用引起速度奇慢的问题
- mysql客户端登陆服务器速度奇慢的问题
- 速度奇慢的android模拟器
- JBUILDERX速度奇慢
- 引起局域网速度慢的常见因素
- 碎片引起的查询速度变慢
- Multi Index在vs2005下编译速度奇慢问题的解决
- Ubuntu无线网速奇慢的问题
- ssh 速度慢的问题
- file_get_contents引起的网站加载速度变慢
- 解决linux下由于驱动问题引起的RTL8111/8168B网卡下速度慢的问题
- 记一次处理oracle分区表索引"乱用"引起的SQL性能问题
- 圆通快递 速度奇慢 服务恶劣
- Composer Update或Install速度慢的解决方案
- 解决eclipse下载插件奇慢的问题
- 调试的时候devenv.exe进程的CPU使用99%,速度奇慢解决办法
- composer install和update慢的问题
- 显示的执行计划与实际不一致,并且速度奇慢
- Web系统的测试
- 发布和发送消息(Posting and Sending Messages)
- 紫薇花开的季节(二)
- Android 本机号码的获取
- 对象的构成模型和关系模型
- update乱用引起速度奇慢的问题
- JS数组方法介绍
- AS3 对象 深度复制
- 框架的本质
- 1.11 UML类图
- 影响世界的微博
- MVC模式与Struts2框架的作用
- MVC模式中--数据流转和数据访问的困境及解决方案
- 一个合格的程序员应该读过哪些书