数据库任务重构

在SQL擅长的地方使用SQL。如果是SQL很容易就能完成的事,就没必要在代码中做这种事,譬如汇总。SQL能更快地处理数据。设计SQL就是为了做这些事的。
假定成功。先执行后检查执行是否像预期的那样起了作用。
更改代码结构。如果接连有两条语句访问同一个表,那么你必须质疑该程序在这两条语句之间所做的事情是否有足够的理由对数据库服务器访问两次。
合并语句。通常只要在where子句中加上or和聪明的使用case,就能将运行时间缩短2倍、3倍或更多倍,这就看你能将多少条语句合在一起了
使用汇总
用coalesce()或nvl()代替if ... is null
使用异常。避免多次访问同一张表,条件判断在异常处理块内解决
逻辑变换。即使不能将其改成一条语句,一点改进也能带来显著的改进。

select from A where ...
test on result of the query
if some condition
update table B
else
update table C

如果更新表C是最常发生的情况,并且执行包含查询语句的更新操作比"先执行查询再更新"更快,那么下面代码可能执行得更快

update table C where (includes condition on A)
if nothing is updated then
update table B


去掉count()。放到获取记录的sql中,例如count(*) over(...)
避免过度。是否执行一条语句的决策权属于调用程序。更值得关注的是那些要根据查询结果进行分支的情形,其结构快类似于下面这段代码:

select c1, ...
into var1, ...
from T
where ...
if (var1 = ...)
then
New operations against the database
end if;

去掉循环。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值