OPERQUERY查询,关于效率,或者说正确用法
2024-09-05 07:46:08
原文: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
最新文章
- SSD框架训练自己的数据集
- hdu 1312(DFS)
- 决战大数据之二:CentOS 7 最新JDK 8安装
- DIV的绝对居中
- 【转载】MySQL索引原理及慢查询优化
- XSLT2.0实用的新功能 .(转)
- 人一生必看的100部电影(全球最佳电影排名榜TOP250)
- Chess---->;简单命令框象棋(人VS人)
- oracle where与having
- 如何用js检测手机是否安装某个app
- jQuery 遍历 - siblings() 方法
- Codeforces Round #346 (Div. 2) A Round-House
- cshtml razor
- java获取本机ip地址(写出来的)
- Spring 的java 配置方式
- python第二天 列表、元组
- Ubuntu 下 Sublime 无法输入中文?(已解决)
- 【二十二】mysqli事务处理与预处理总结
- Docker技术入门与实战 第二版-学习笔记-9-Docker Compose 项目-3-Django项目实例
- vue性能优化2--引入cdn
热门文章
- R 读取xls/xlsx文件
- svn中日志不展示解决方法记录
- Monit-开源服务器监控工具
- MODI的OCR接口
- 2018-2019 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2018) A. Altruistic Amphibians (DP)
- [2019牛客多校第二场][E. MAZE]
- parent([expr]) 取得一个包含着所有匹配元素的唯一父元素的元素集合。
- bbs-admin-自定义admin(一)
- mysql查询字段中含有中文
- mybatis 多级级联(多级嵌套)