购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

26.避免只是为了帮助确定代码逻辑应当执行更新还是插入而从表中选择一行

要从表中选择一行需要对DB2做一次调用。如果有一个处理记录的程序,要根据各个记录执行一个SQL UPDATE或SQL INSERT,它就需要知道在一般执行期间的更新数和插入数,这很重要。你可能并不希望首先用SQL SELECT语句来确定表中是否已经存在某一行。如果程序在运行期间处理的SQL UPDATE多于SQL INSERT,那么程序逻辑就应该跳过最初的SQL Select,而直接执行SQL Update。如果SQL Update语句得到一个+100 Not Found(未找到)错误,则执行SQL Insert。

如果程序执行的插入多于更新,则跳过SQL Select而直接执行SQL Insert。如果SQL INSERT语句接收到一个-803 Duplicate Insert(重复插入)错误,则执行SQL UPDATE。

要当心-803错误存在很大开销,如果遇到太多这种错误就会影响性能。因此应当注意一定要了解插入和更新的记录有多少。

注意DB2 V9引入了一个SQL MERGE语句,这个语句会更为高效。SQL Merge可以指定在匹配和不匹配条件下分别做什么(分别完成UPDATE和INSERT),这样一来,两种情况都可以在同一个SQL语句中加以处理(有关内容参见本章后面的调优技巧#82)。 PCfyN1BCo353IJw9DCUHURrpBKOyau9E6VF68xaCkJpoI03/gvChtLfbFDFhI8jR

点击中间区域
呼出菜单
上一章
目录
下一章
×