OPERQUERY查询,关于效率,或者说正确用法
原文:https://blog.csdn.net/u013641136/article/details/50379596
做过一个项目,需要在SQLSERVER创建对ORACLE的DBLINK然后通过OPERQUERY访问ORACLE查询记录并返回到SQLSERVER某表
ORACLE中的数据量在100W行左右,采用insert into T1(X1,X2,X3) SELECT * FROM OPENQUERY(XXXXX)的方式,效率很低,尤其是很多时候是按条件查询,只需要返回几条记录,却需要几十分钟,即便改成insert into T1(X1,X2,X3) SELECT * FROM OPENQUERY(XXXXX) where xxx 也不行。这已然超出效率慢的范畴,而是语句有问题。
后来考虑了一下,慢是因为这算是二次查询,会先将ORACLE中所有数据查询返回到OPERQUERY中,再按条件去OPERQUERY查询,提高效率的方法是将条件放入OPERQUERY中,然而条件并非一个数值,而是另一张临时表,固采用游标的方式,一条一条将临时表中的记录处理为变量,放入OPERQUERY中作为条件执行。果然不会再出现查询3条记录插入SQLSERVER却需要30分钟,只需1秒钟。
语句实例:
declare @itemid nvarchar()
declare auth_cur cursor for select item_number from erp_part_item open auth_cur fetch next from auth_cur into @itemid while (@@fetch_status=) begin
DECLARE @TSQL varchar()
SELECT @TSQL = 'insert into HISTORY_ITEM(ITEM_NUMBER,ITEM_TEMPLATE,ITEM_DESC,ITEM_UOM,UNIT_WEIGHT,ORG,FLAG,inventory) SELECT * FROM OPENQUERY(TO_ERPZS,''SELECT ITEM_NUMBER,ITEM_TYPE,ITEM_DESCRIPTION,PRIMARY_UOM_CODE,UNIT_WEIGHT,ORGANIZATION_CODE,LOT_FLAG,Inventory_Item_Status_Code from APPS.CUX_PDM_ITEMS_BOM_V where item_number = ''''' + @itemid + ''''''')'
EXEC (@TSQL)
fetch next from auth_cur into @itemid
end close auth_cur deallocate auth_cur
OPERQUERY查询,关于效率,或者说正确用法的更多相关文章
- C#中dynamic的正确用法
C#中dynamic的正确用法 http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html dynamic是FrameWork4 ...
- C#中dynamic的正确用法 以及 typeof(DynamicSample).GetMethod("Add");
dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你 ...
- 【转】改善C#程序的建议2:C#中dynamic的正确用法 空间
dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你 ...
- C#中dynamic、ExpandoObject 的正确用法
原文地址:http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html dynamic是FrameWork4.0的新特性.dynam ...
- C#中dynamic的正确用法【转】
dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你 ...
- [No0000179]改善C#程序的建议2:C#中dynamic的正确用法
dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你 ...
- 【转】C#中dynamic的正确用法
原文:http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html dynamic是FrameWork4.0的新特性.dynamic ...
- 改善C#程序的建议2:C#中dynamic的正确用法
dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你 ...
- linux中memset的正确用法
linux中memset的正确用法 [起因]希望对各种类型的数组进行初始化,避免野值 [函数头文件] 提示:在linux中可以在terminal中输入 "man memset"进行 ...
随机推荐
- Lab2 Report
1.安装SeleniumIDE插件 a)安装Firefox 17.0 - 56.*版本的firefox,下载地址为:http://ftp.mozilla.org/pub/firefox/release ...
- Redis单机安装部署
1.下载: redis-4.0.8.tar.gz,存放至/data/tools下,解压: # wget http://download.redis.io/releases/redis-4.0.8.ta ...
- 【Git】二、文件的提交与查看
提要 //添加git跟踪文件,stage操作 $git add readme.txt //提交到本地分支 $git commit -m xxx //查看当前git工作状态,可以看到未跟踪文件,已跟踪未 ...
- 将TensorFlow训练好的模型迁移到Android APP上(TensorFlowLite)
转自:https://blog.csdn.net/u012328159/article/details/81101074 https://blog.csdn.net/masa_fish/article ...
- UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)
# -*- coding:utf-8 -*- china=u'我爱你,中国' #china=china.encode('utf8') file_txt = open("zhongguo.tx ...
- kubernetes之download api
download api作用: 可以通过环境变量或Volume挂载将pod信息注入到容器内部 apiVersion: apps/v1 kind: Deployment metadata: name: ...
- 嵌入式Linux应用开发完全手册读书笔记——常用的命令
嵌入式开发中常用的命令 grep命令 用法:grep [option] PATTERN [FILE...] 例如: 在内核目录下查找包含"request_irq"字样的文件 gre ...
- C++STL库常用函数用法
开学就要上OOP了.....感觉十分萌萌哒- -! 整理自<ACM程序设计>,本文为转载(原文地址) 迭代器(iterator) 个人理解就是把所有和迭代有关的东西给抽象出来的,不管是数组 ...
- tensorflow模型的保存与恢复,以及ckpt到pb的转化
转自 https://www.cnblogs.com/zerotoinfinity/p/10242849.html 一.模型的保存 使用tensorflow训练模型的过程中,需要适时对模型进行保存,以 ...
- P2172 [国家集训队]部落战争 二分图最小不相交路径覆盖
二分图最小不相交路径覆盖 #include<bits/stdc++.h> using namespace std; ; ; ; ], nxt[MAXM << ], f[MAXM ...