我正在嘗試優化在此處使用頻率非常高的Crystal報表。我成功地優化了大量查詢,但仍然有最後一個瓶頸:這是從報告中生成的主要查詢。Sybase 12 LEFT JOIN CrystalReports的性能問題
SELECT
A.*,
B.*,
C.*,
D.*,
E."N",
F."N",
G."N"
FROM
A
LEFT OUTER JOIN B ON
A."PK" = B."FK"
LEFT OUTER JOIN C ON
A."PK" = C."FK"
LEFT OUTER JOIN D ON
A."FK" = D."PK"
LEFT OUTER JOIN E ON
A."PK" = E."FK"
LEFT OUTER JOIN F ON
A."PK" = F."FK"
LEFT OUTER JOIN G ON
A."PK" = G."FK"
WHERE A.PK = ####
A,B,C和D是表格。 E,F,G是簡單的意見。
正如您所見,報告生成了多個LEFT JOINS。此查詢需要2.28秒才能完成(從計劃查看器統計)。我確定了三個似乎有問題的連接。如果我從查詢中刪除E,F,G,它變得幾乎瞬間(來自同一統計0.0009s)
SELECT
A.*,
B.*,
C.*,
D.*
FROM
A
LEFT OUTER JOIN B ON
A."PK" = B."FK"
LEFT OUTER JOIN C ON
A."PK" = C."FK"
LEFT OUTER JOIN D ON
A."FK" = D."PK"
WHERE A.PK = ####
我因子評分它可能是緩慢的意見,但如果我的例子做.. 。
SELECT *
FROM E
WHERE E.FK = ####
...這也幾乎是一瞬間(0.0009s)
表都對的PK-FKS索引。 視圖E,F,G都將[FK | N]作爲列返回一個或不包含行,所以生成的列爲NULL或數字。
你知道我怎麼能使這個查詢快?
PS:如果我更換由內左外連接,連接的主查詢變快...: -/
或者試圖分裂這個查詢到多個查詢該報告將是一個更好的解決辦法?
謝謝!
非常好的謝謝你!我的報告現在快得多,我不必更改報告本身,只需將它的請求嵌入到使這些函數調用的視圖中;-) –