日期:2014-05-17  浏览次数:20959 次

送分题
看了这么个帖子
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;