簡體   English   中英

從 SQL Server 到 Oracle 使用點表示法與 OpenQuery

[英]Using dot notation vs OpenQuery from SQL Server to Oracle

試圖將數據從 Oracle 引入 SQL Server。 SQL 定義了一個鏈接服務器。 我需要在 Oracle 端過濾掉數據,所以有一個 WHERE 子句根據一列(時間段)的值來限制數據。

使用兩種不同的方法嘗試性能:OpenQuery:

select * INTO T2 from OpenQuery(LinkedSrv,'select * from SCHEMA.TAB')

點符號(LinkedServer..Schema.Table):

select * INTO T2 from LinkedSrv..SCHEMA.TAB

兩者的執行速度都很慢,每秒推送大約 5-6k 行。 對於 20M 的行表,這並不理想。 然后發現了一些很有趣的事情:

select * INTO T2 from LinkedSrv..SCHEMA.TAB WHERE col >= Value

這將吞吐量推高至近 100k 行/秒

使用 OpenQuery 指定標准不會影響整個過程。 解釋計划顯示

RemoteQuery -> ComputeScalar -> Filter (WHERE) -> TableInsert in the dot notation scenario with WHERE.

除此之外,解釋計划是相同的。 那么......如何在本地添加一個 WHERE 子句(因為這是它所做的)將吞吐量提高 10 倍???

...在使用 OpenQuery 時,我該怎么做才能實現(預期的結果)相同的快速吞吐量?

謝謝!

點表示法和 OpenQuery 方法之間的區別在於,第一個使用客戶端游標引擎,並且大多數事情在本地進行評估,而第二個將 Query 發送到遠程服務器並讀取輸出。

OpenQuery 方法並不總是在點符號查詢中過濾數據更快。 它基於每個本地和遠程服務器資源。

查看以下stackoverflow問題,他們將為您提供更多信息:

附加信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM