0
執行SELECT
查詢時出現一些超時問題。SELECT query throws timeout
這是SQL Server 2008鏈接到Oracle服務器(數據庫AAAA,表K和P)。 我們正在使用的提供程序是用於Oracle的Microsoft OLE DB提供程序(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獲取數據,但也許某些查詢優化可能會解決問題。
問候。
UPDATE:
的索引被設置行和表中的數據的量是小於100K。 我已經將問題追溯到dbo.AAAA_tblPosiljke,它是從Oracle上的表中獲取數據的MSSQL服務器上的視圖。下面是查詢:
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生成的當前查詢執行計劃。謝謝。 –
我已經與Oracle鏈接服務器「混合」了,至少可以說。你嘗試過'INNER JOIN KOPA..SCHEMA_NAME.KDF_INPUT_POD AS P'嗎?您可能想嘗試使用Oracle的OLE DB提供程序而不是Microsoft的,它在某些情況下性能更好。雖然老實說,我發現與Oracle連接的服務器合作比純粹的科學更具有試驗和錯誤。 – Pondlife
謝謝你幫助我。 BOn Jarvis:我確信問題在於與MSSQL相關的Oracle,而不是索引/記錄數量相關。 Pondlife:如果更改爲Oracle提供程序不起作用,我還有其他選項嗎? – no9