一条update sql性能提问

[复制链接]
查看11 | 回复9 | 2006-4-17 13:46:34 | 显示全部楼层 |阅读模式
目前数据库有一条update sql很慢,要运行3~4小时,请帮忙分析一下,具体的情况如下:
SQL 如下:
UPDATE fwhdbwipstephistory
SET eqp_sk = :b1
WHERE eqpid = :b2 AND eqptype = :b3 AND eqp_sk = 0
环境如下:
HPUX+ORACLE817
RBO 模式 optimizer_modeRULE
fwhdbwipstephistory 大约15gb的空间。
索引情况,只是在EQP_SK COLUMN上有一个NUNUNIQUE INDEX.
目前还不知道执行计划的情况。
请问,根据上面的情况,可以知道为什么会这么慢吗?
如果在eqpid和eqptype 上建立一个联合index,会不会改善性能?(根据经验,以为目前没有办法看到执行计划)
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
可以看到执行计划的
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
15G的表, where 后面3个条件只有一个有索引,update跑3个多小时.
估计加了索引就好了.
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
eqpid = :b2 AND eqptype = :b3 AND eqp_sk = 0
表的数据量 已经建了多少索引等信息 该语句的执行计划贴出来比较好说

如果在eqpid和eqptype 上建立一个联合index,估计会改善性能
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
在eqpid ,eqptype ,eqp_sk 上创建组合索引肯定会好一些,
但如果更新的结果集很大,就最要用pl/sql分批提交...
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
最初由 xzh2000 发布
[B]在eqpid ,eqptype ,eqp_sk 上创建组合索引肯定会好一些,
但如果更新的结果集很大,就最要用pl/sql分批提交... [/B]

eqpid = :b2 AND eqptype = :b3 AND eqp_sk = 0
先估算一下这个结果集有多大,如果这个返回的结果集很小的话,那么建立一个组合索引效果是很好的了



如果修改的结果集很大的话,建立组合索引的效果可能不是很大了,因为是update 与delete一样,建议分批update 然后commit
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
最好批量提交,这样可以减轻数据库的压力
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
谢谢大家的回答,返回的数据量应该不是很大,我测试一下在三个column上建立一个联合index,我想问一下,目前eqp_sk 已经有index,我可以在eqp_sk ,eqpidAND eqptype上建立一个联合的index吗?还是只需要在eqpidAND eqptype 建立一个联合INDEX?哪个好些?
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
最初由 tan9030 发布
[B]谢谢大家的回答,返回的数据量应该不是很大,我测试一下在三个column上建立一个联合index,我想问一下,目前eqp_sk 已经有index,我可以在eqp_sk ,eqpidAND eqptype上建立一个联合的index吗?还是只需要在eqpidAND eqptype 建立一个联合INDEX?哪个好些? [/B]

根据你的数据选择性了
try
select count(*) as a, count(distinct eqp_sk ) as eqp_sk ,count(distinct eqpid) , count(distinct eqptype)
from fwhdbwipstephistory
贴出结果
看起来,似乎只需在eqpid上建立index即可(猜测)
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
最简单的方法,统计这个表,让oracle使用cbo方式去执行
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行