DB2获取进程中有一种做法称为块获取(block fetching)。块获取可以显著减少通过网络发送的消息数,这种方法只适用于那些不更新或不会删除数据的游标。通过使用块获取,DB2会把一个SQL查询获取的行归组放入一个很大的行块(这个行块可以放在一个消息缓冲区中)。然后DB2通过网络传输这个行块,而不必为每一行分别发送一个单独的消息。增加这个语句还有另外一个好处,这样可能会减少锁定开销(如果有相应的代码)。
要让DB2充分利用块获取进程,DB2必须确定游标不能用于更新或删除。要指示游标不会修改数据,最容易的办法就是为查询增加For Fetch Only或For Read Only子句。如果没有这个语句,DB2会把游标定义为一个不明确的游标,这就会关闭块获取。
指定For Read Only还可以改善获取操作的性能,因为DB2会避免排他锁(即X锁),保证所选的数据不会被修改,从而避免某些类型的死锁。
通过For Fetch Only, DB2可以了解到以下方面:
·结果集是只读的。
·不允许定位更新和删除。
·游标不会得到U锁或X锁。