原文: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查询,关于效率,或者说正确用法的更多相关文章

  1. C#中dynamic的正确用法

    C#中dynamic的正确用法  http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html dynamic是FrameWork4 ...

  2. C#中dynamic的正确用法 以及 typeof(DynamicSample).GetMethod("Add");

    dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你 ...

  3. 【转】改善C#程序的建议2:C#中dynamic的正确用法 空间

    dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你 ...

  4. C#中dynamic、ExpandoObject 的正确用法

    原文地址:http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html dynamic是FrameWork4.0的新特性.dynam ...

  5. C#中dynamic的正确用法【转】

    dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你 ...

  6. [No0000179]改善C#程序的建议2:C#中dynamic的正确用法

    dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你 ...

  7. 【转】C#中dynamic的正确用法

    原文:http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html dynamic是FrameWork4.0的新特性.dynamic ...

  8. 改善C#程序的建议2:C#中dynamic的正确用法

    dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你 ...

  9. linux中memset的正确用法

    linux中memset的正确用法 [起因]希望对各种类型的数组进行初始化,避免野值 [函数头文件] 提示:在linux中可以在terminal中输入 "man memset"进行 ...

随机推荐

  1. JPA的入门案例

    1.1    需求介绍 本章节我们是实现的功能是保存一个客户到数据库的客户表中. 1.2    开发包介绍 由于JPA是sun公司制定的API规范,所以我们不需要导入额外的JPA相关的jar包,只需要 ...

  2. 【Distributed】大型网站高并发和高可用

    一.DNS域名解析 二.大型网站系统应有的特点 三.网站架构演变过程 3.1 传统架构 3.2 分布式架构 3.3 SOA架构 3.4 微服务架构 四.高并发设计原则 4.1 拆分系统 4.2 服务化 ...

  3. 使用 django-redis 作缓存

    1  缓存内容使用 django支持多种不同的cache backend,默认使用的是localmem,django-redis 是一个使django支持 redis cache的功能组件. 安装 p ...

  4. MySQL的sql_mode参数之NO_AUTO_VALUE_ON_ZERO对主键ID为0的记录影响

    最近遇到一个不合理使用数据库进行项目开发最终导致项目进度受阻的一个问题,某天几位开发人员找到我并告知数据库中某张表数据无法写入,又告知某行记录被删除了,因为被删除的记录对开发框架影响很大,他们已尝试重 ...

  5. Win10系统升级更新方式将会更智能

    使用Win10系统的你肯定遇到过在工作时开始自动更新而不得不搁置工作的情况,想必你也已经被Win10系统的自动更新折磨不已,不过这种情况将会马上得到改观. 微软现在已经开始寻找更智能的版本升级更新方式 ...

  6. win10下 switchhost权限修改问题

    switchhost提示没有切换权限:C:\WINDOWS\system32\drivers\etc\host 文件无法修改   1.找到host文件 C:\Windows\System32\driv ...

  7. PAT Basic 1087 有多少不同的值 (20 分)

    当自然数 n 依次取 1.2.3.…….N 时,算式 ⌊ 有多少个不同的值?(注:⌊ 为取整函数,表示不超过 x 的最大自然数,即 x 的整数部分.) 输入格式: 输入给出一个正整数 N(2). 输出 ...

  8. Java web中文乱码

    1.设置工程的编码方式 window-preferences-general-workspace 改成uef-8 2.设置html的编码方式 <meta http-equiv="Con ...

  9. Java实现文件的上传下载(含源代码和jar包)

    1.需要使用的jar包 链接:https://pan.baidu.com/s/1IaxQRSwfzxDpe4w4JiaEKw 提取码:xwtz 2.如果想实现文件的下载,需要创建一张表,表的结构为 i ...

  10. Spring基础(一)------装配Bean

    一.Spring配置的可选方案 三种主要的装配机制: 在xml文件中进行显示配置: 在java中进行显示配置: 隐式的bean发现机制和自动装配. 使用建议:尽可能使用自动配置的机制,显示配置越少越好 ...