首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

送分题,该如何解决

2012-04-04 
送分题看了这么个帖子http://tech.it168.com/a2010/0428/879/000000879859.shtml里面说1、用case代替update

送分题
看了这么个帖子
http://tech.it168.com/a2010/0428/879/000000879859.shtml
里面说

1、用case代替update

  要更新一条记录,我们立即会想到update,这个问题非常常见,许多开发人员经常忽视这个原则,因为使用update看起来非常自然,非常合乎逻辑。

  假设你从Customer表中提取记录,你想将超过10万美元的订单标记为“Preferred”,因此你会想到使用一条update语句将CustomerRank列更新为“Preferred”,问题是update语句是有日志的,这就意味着每条记录它会写两次,解决这个问题的办法就是在SQL查询中内嵌case语句,在向表写入“Preferred”标志前,它会用订单金额条件对每一行进行检查,满足条件的才会更新,性能的提升是惊人的。

就这一段,不是很明白,求高人指点~~~

[解决办法]

探讨
问题是update语句是有日志的,这就意味着每条记录它会写两次,

[解决办法]
意思是你的update要加where子句,不能更新整个表。

“在向表写入“Preferred”标志前,它会用订单金额条件对每一行进行检查,满足条件的才会更新,性能的提升是惊人的。”

估计这篇文章是从国外翻译的。
[解决办法]
探讨
case与decode函数作用相似。通过查询时的判断来优化SQL性能
一个简单的例子


SQL code
UPDATE Customer
SET CustomerRank=
CASE WHEN amount>=10 THEN 'Preferred'
END;

热点排行