字段类型修改引起的性能问题

今天在生产环境一段平时表现良好的程序,出现了性能问题,在loop循环中死活执行不完,这个loop循环大概需要循环40W次,

在循环里面执行的sql大致为:

update t_object set ****
where owner=:a
    and object_type=:b
    and object_id = :c
其中(owner,object_type)建了索引N1,(object_id)建有索引N2,从生产环境抓取的执行计划,可以看到对于表t_object采用的

是索引N1的范围扫描,通过观察绑定变量,发现通过索引N1过滤出来的数据还是达到几十万之多!这样的扫描方式显然是低效的,

但是为什么优化器不采用索引N2去扫描数据了,这样过滤出的数据将很少,执行效率肯定比用N1快的多。

后来通过观察表的字段发现object_id的字段类型为varchar2,而绑定变量:c的数据类型是number,这样oracle就自动进行了隐式转换,

从而忽略掉了索引N2,导致了这次性能问题!原来在上个版本,为了程序的兼容性,我们将字段的object_id的字段类型从number变更

为了varchar2类型,但是忘记了这个索引!!后来没办法只能变更程序

update t_object set ****
where owner=:a
    and object_type=:b
    and object_id = to_char(:c)

才让这段逻辑顺利执行完毕,教训呀。。。希望大家也能引以为戒。。。。

当我们在SQL Server中修改字段时,有时候可能遇到超时的情况。这通常是因为修改所涉及的数据库表格太大,操作耗时较长,或者当前数据库的负载较高,导致服务器无法及时响应。 为了解决这个问题,我们可以采取以下几个方法: 1. 增加超时时间:可以通过更SQL Server Management Studio (SSMS) 中的查询超时时间来解决。默认情况下,SSMS的查询超时时间为30秒,我们可以将其增加到更大的值,如60秒或120秒,在这个时间范围内,尝试修改字段。 2. 拆分修改操作:如果表格非常大,一次性进行修改可能导致超时。可以将修改操作拆分成多个小的操作,逐渐修改表格的每一部分。可以使用分页查询、游标或者临时表来实现这个目的。 3. 优化数据库性能:超时问题还可能是由于数据库的性能不佳引起的。我们可以通过优化查询、创建索引、减少表的规模等手段来提高数据库的性能,从而减少修改字段时的超时问题。 4. 降低数据库负载:如果数据库的负载过高,我们可以尝试调整其他操作的优先级,将修改字段的操作放在负载较低的时候进行。我们也可以考虑增加服务器的资源(如CPU、内存等)来提高数据库的负载能力。 总之,当我们在SQL Server中修改字段时遇到超时问题,我们可以通过增加超时时间、拆分操作、优化性能和降低负载等方法来解决。每个方法的适用性取决于具体情况,我们需要根据实际情况选择最合适的方法来解决超时问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值