0

执行SELECT查询时遇到一些超时问题。

它是链接到 Oracle 服务器(数据库 AAAA,表 K 和 P)的 SQL Server 2008。我们使用的提供程序是 Microsoft OLE DB Provider for Oracle (MSDAORA)。

SELECT     
    I.DOF AS Id, I.DokumentDatumDokumenta, I.DokumentaDatumPrejetja, 
    I.PartnerID, I.PartnerNaziv, I.PartnerNaslov, I.PartnerIdentifikacijskaStevilka, 
    I.PartnerPostnaStevilka, I.PartnerKraj, I.PartnerDrzava,   
    I.PrejemnikInternoPodjetjeId, I.PrejemnikInternoPodjetje,   
    I.PrejemnikOrganizacijskaSkupinaId, 
    I.PrejemnikOrganizacijskaSkupina, I.PrejemnikZaposleni, I.DokumentEksternaOznaka, 
    I.DokumentVrstaDokumenta, I.DokumentZadeva, 
    I.ProcesOpravilo, I.PrejemnikVSkupiniId, I.PrejemnikVSkupiniNaziv, 
    I.PrejmnikVSkupiniWorkflowId, D.Path AS EDokumentPath, I.SkeniranjeUporabnik, 
    I.SkeniranjeTime, I.ReleaseTime, I.WorkflowName, I.NadzornikRacunaId, 
    I.NadzornikRacunaNaziv, I.NadzornikRacunaWorkflowId, I.Znesek, 
    K.SIF_VAL AS Valuta, D.ZagnanProcesTime, I.DatumValute, I.StevilkaNarocila, 
    I.DUR, D.DocId, P.ZNESEK AS ZnesekVeur
FROM         
    dbo.tblAscentIndex AS I 
INNER JOIN
    dbo.tblAscentDoc AS D ON D.DocId = I.DocId 
INNER JOIN
    dbo.AAAA_tblPosiljke AS K ON I.DOF = K.DOF 
INNER JOIN
    OPENQUERY(AAAA, 'SELECT DOF,ZNESEK FROM KDF_INPUT_POD') AS P ON P.DOF = I.DOF

如果有人对此查询有任何优化建议,我将不胜感激。

问题在于它同时从本地 SQL Server 和链接的 Oracle 获取数据,但也许一些查询优化可能会解决问题。

问候。

更新:

索引设置正常,表中的数据量小于 100k。我已将问题追溯到 dbo.AAAA_tblPosiljke,它是 MSSQL 服务器上的一个视图,它从 Oracle 上的表中获取数据。这是查询:

SELECT     ID_KIP AS ID_CDS, STATUS, DOF, ST_DOK AS ST_DOKUMENTA, SIF_OE, SIF_PP, IDENTIF_ST_OE, IDENTIF_ST_PP, DAT_DOSPETJA, DAT_DUR, 
                      SIF_VAL, ZNESEK_VAL, OPIS, VR_PREDMETA, PODPISNIK AS SIF_PODPISNIKA, REFERENT AS SIF_REFERENTA, DAT_FAKTURE, ST_NAROCILA, 
                      DAT_ZAPADLOSTI, APLIKACIJA, DAT_OBDOBJA, DAT_ECL, ST_ECL, CAR_POSTOPEK, MODEL, SKLIC, VRSTA_TRR, VEZA_URL, 
                      KPA_STATUS_PRENOSA, KPA_NAPAKA, UPORABNIK, ID_ARH, VK_PGD, ID_PGD, PROJEKT
FROM         OPENQUERY(AAAA, 'SELECT * FROM KDF_INPUT_POD WHERE STATUS NOT IN (9)') AS derivedtbl_1
WHERE     (DAT_DOSPETJA > CONVERT(DATETIME, '2012-03-01 00:00:00', 102))

此查询的部分执行时间超过 2 分钟,而在 Oracle 上执行相同的查询不到一秒钟。看起来像获取数据的问题。知道如何进行优化吗?

问候。

4

1 回答 1

0

我通过在本地创建有问题的表解决了这个问题。我定期同步表,并在 sql 服务器端而不是在 oracle 端执行它们。

于 2012-07-02T11:20:42.620 回答