国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

SQLServer訪問Oracle查詢性能問題解決

2024-08-29 13:54:22
字體:
供稿:網(wǎng)友
SQLServer訪問Oracle查詢性能問題解決 2014-03-25 08:45 by JentleWang, ... 閱讀, ... 評(píng)論, 收藏, 編輯 1. 問題

  系統(tǒng)有個(gè)模塊,需要查詢Oracle數(shù)據(jù)庫中的數(shù)據(jù)。目前是通過建立鏈接服務(wù)器實(shí)現(xiàn)的。

  SQLServer訪問Oracle實(shí)現(xiàn) 可參考這篇文章http://www.cnblogs.com/gnielee/archive/2010/09/07/access-oracle-from-sqlserver.html

  目前的查詢語句就是一個(gè)簡單的帶where條件的查詢語句,類似如下:

  

SELECT * FROM LINKED_NAME..ACCOUNT_NAME.TABLE_NAME WHERE COLUMN1=SID;

  存在的問題是查詢速度非常慢,前臺(tái)報(bào)超時(shí)。所以準(zhǔn)備提升下查詢的性能

2. 分析

  首先,確定遠(yuǎn)程Oracle的表在篩選字段上是否存在索引。經(jīng)確認(rèn),存在索引。

  然后,在SSMS客戶端中查看了執(zhí)行語句的執(zhí)行計(jì)劃,如下:

  

  從執(zhí)行計(jì)劃可以看出,過程沒有和自己設(shè)想的那樣,原以為SQLServer會(huì)將整個(gè)查詢提交到Oracle服務(wù)器執(zhí)行。而實(shí)際在遠(yuǎn)程查詢時(shí),并沒有加入where條件,而是將結(jié)果返回到本地后,在本地執(zhí)行篩選(有一個(gè)篩選器)

  這樣速度肯定會(huì)非常慢,因?yàn)椴樵儧]有使用到索引查找,需要將遠(yuǎn)程數(shù)據(jù)全部傳輸?shù)奖镜睾蟛艌?zhí)行篩選,相當(dāng)于全表掃描,還多了網(wǎng)絡(luò)傳輸?shù)臅r(shí)間。

3. 解決

  其實(shí)只要能將帶where條件的查詢語句一并提交到Oracle服務(wù)器執(zhí)行遠(yuǎn)程查詢,就可以解決性能問題了。

  但問題是OpenQuery不支持參數(shù)。見微軟MSDNhttp://technet.microsoft.com/zh-cn/library/ms188427.aspx

  

  但好在我們可以另辟蹊徑,通過拼接動(dòng)態(tài)SQL的方式實(shí)現(xiàn)傳遞查詢參數(shù)。

  OpenQuery使用參數(shù)可參考這篇文章:http://www.cnblogs.com/Dannier/archive/2011/09/21/openquery.html

  通過這種方式優(yōu)化后,執(zhí)行計(jì)劃變?yōu)槿缦拢嚎梢钥吹綄?shí)際返回的行數(shù)很少了

  

  查詢速度提升明顯,由原來的前臺(tái)超時(shí)到現(xiàn)在的毫秒級(jí)。

  小小的得意一下^_^,歡迎拍磚。如有其他方法,求分享,謝謝!


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 额济纳旗| 辽中县| 伊吾县| 大姚县| 崇文区| 门头沟区| 清涧县| 鄂伦春自治旗| 温宿县| 云林县| 沽源县| 滁州市| 建瓯市| 栖霞市| 田阳县| 当阳市| 肥西县| 本溪市| 安阳县| 娄烦县| 秀山| 崇仁县| 东乡族自治县| 浪卡子县| 临清市| 浦北县| 观塘区| 晋江市| 旌德县| 广丰县| 共和县| 岳阳市| 屏东市| 虹口区| 视频| 登封市| 五大连池市| 桐乡市| 曲靖市| 长武县| 宁明县|