2016-02-29 38 views
0

我有這樣的問題:PostgreSQL的鏈接的服務器查詢很慢

進行查詢在鏈接服務器以PostgreSQL是非常緩慢的,非常,非常慢,例如:

,如果我在pgAdmin的運行此查詢:

select max(oldmedicionid) from tl.tlinputtable 

它返回的最大結果只是:246毫秒

但是,如果我運行了鏈接服務器(使用SQLSERVER 2008年),我創建使用ODBC到postgr的DBLINK ESQL,所以如果我運行此:

select MAX(oldmedicionid) from LINKPDATL.PDATL.tl.tlinputtable 

查詢給我造成1分鐘或有時更多...

可能是什麼我problema?我想是不是我的PostgreSQL數據庫,是像dblink的東西很慢,

我該如何提高性能?

+0

當你運行'SELECT max_oldmedicionid FROM OPENQUERY(LINKPDATL,'從PDATL.tl.tlinputtable''選擇max(oldmedicionid)max_oldmedicionid)會發生什麼? –

+0

用這種方式完美工作,爲什麼只用openquery工作得很快? –

+0

正如@ RobinsTharakan的回答所示,聚合可能由SQL Server執行。這意味着在PostgreSQL服務器上運行的查詢本質上是'SELECT oldmedicionid FROM tl.tlinputtable',然後整個結果集被髮送到MS SQL Server,並且MS SQL Server正在進行聚合。這只是對SQL Server或PostgreSQL提供程序的優化而已。 'OPENQUERY()'可以讓你精確控制查詢的用途。 –

回答

2

鑑定:有很好的機會,在ODBC方法聚集MAX(x)在客戶端所做(而不是在服務器端)。這可以很容易地通過查看將行數加倍來將查詢時間增加大約兩倍來進行交叉檢查。

分辨率:如果這是一個少數極端案例中,你可以創建一個VIEW,計算這對Postgres的服務器端,以及ODBC挑彙總值。