互联网服务数据库

关于优化器对SQL处理的疑问

大家知不知道db2的优化器会不会对SQL加或者去掉一些锁语句的?比如for update.. with rr .. with ur ..之类的 。目前我在系统的程序里面使用的SQL(select * from tabName where col1=nn ... with ur)后缀没有带for update,但是在db2top中进行查看(dynamic)的时候,发现语句有...显示全部
大家知不知道db2的优化器会不会对SQL加或者去掉一些锁语句的?比如for update.. with rr .. with ur ..之类的 。
目前我在系统的程序里面使用的SQL(select * from tabName where col1=nn ... with ur)后缀没有带for update,但是在db2top中进行查看(dynamic)的时候,发现语句有时候是select * from tabName where col1=nn ...for update 又有时候是select * from tabName where col1=nn ...(把with ur去掉了) 。
之后发现不仅是使用db2top发现会这样,db2pd和使用数据库的快照函数、视图看也有这种情况。
求解。。。收起
参与9

查看其它 7 个回答UniverseSae的回答

UniverseSaeUniverseSae数据库管理员待业
回复 3# drdb2


   以查询计划来看是ur级别,但是很郁闷就是在db2top和db2pd里面看到的语句跟程序里面的不一样。而我使用两份程序来测试的,一份是c写另外一份是python写的,python写的程序里面的SQL到db2top和db2pd里看是不会变,而c程序的那一块写的程序里面的sql到db2top和db2pd就会加上for update,还有更奇怪的一件事,就是c程序里面的SQL被db2top和db2pd抓到后,单独拿来运行是会报语法错误的,比如我程序里面写的SQL是:select * from a union select * from b with ur,但是在db2top和db2pd看到的是select * from a union select * from b for update with ur,但是DB2的SQL语法规则里面是如果是查询SQL并且如果SQL中含有两张表或者两张表以上的,是不允许含有for update的,就相当于一个update语句里面不能同时更新两张表的意思。这几点我都很疑惑,不知道前辈是否遇到过我这种问题?
互联网服务 · 2011-12-04
浏览869

回答者

UniverseSae
数据库管理员待业

UniverseSae 最近回答过的问题

回答状态

  • 发布时间:2011-12-04
  • 关注会员:1 人
  • 回答浏览:869
  • X社区推广