我在执行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获取数据,但也许一些查询优化可能会解决问题。
问候。
更新:
索引设置为 OK,表中的数据量小于 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 上,相同的查询需要不到一秒钟的时间。看起来获取数据有问题。知道如何进行优化吗?
问候。
我通过在本地创建有问题的表来解决这个问题。我定期同步表,并在 sql 服务器端而不是在预言机端执行它们。