[英]Slow response of DB2 on multiple JOINs in query by JDBC
我在DB2數據庫中有3個不同的表(沒有任何主鍵或外鍵),
CREATE TABLE XW (
SRCLB VARCHAR(10) NOT NULL,
SRCFL VARCHAR(10) NOT NULL,
SRCMB VARCHAR(10) NOT NULL,
NAME VARCHAR(30) NOT NULL,
VARSQ DOUBLE NOT NULL,
UNIQUE (SRCLB, SRCFL, SRCMB, NAME, VARSQ)
);
CREATE TABLE XO (
LOBJ VARCHAR(10) NOT NULL,
LTYPE VARCHAR(10) NOT NULL,
ATTR VARCHAR(10) NOT NULL,
LTEXT VARCHAR(50),
UNIQUE (LOBJ, LTYPE, ATTR)
);
CREATE TABLE XM (
LIB VARCHAR(10) NOT NULL,
FILE VARCHAR(10) NOT NULL,
MBR VARCHAR(10) NOT NULL,
SEQ DOUBLE NOT NULL,
DTA VARCHAR(132),
RECN INTEGER,
UNIQUE (LIB, FILE, MBR, SEQ)
);
每個表都有2個lacs(appx)記錄。 當我執行此查詢時
SELECT
DISTINCT XW.SRCMB
,XM.SEQ
,XM.DTA
,XM. FILE
,XM.LIB
,XO.TEXT
,XO.ATTR
FROM
(
XW INNER JOIN XM
ON (XW.VRECN = XM.RECN)
AND (XW.SRCMB = XM.MBR)
AND (
XW.SRCFL = XM. FILE
)
AND (XW.SRCLB = XM.LIB)
)
LEFT OUTER JOIN XO
ON (XW.SRCMB = XO.LOBJ)
WHERE
(XW.NAME = 'DB-NAME-A')
ORDER BY
XW.SRCMB
,XM.SEQ;
它會在15秒以上返回結果。 但是當我在WHERE條件下指定更多列時
SELECT
DISTINCT XW.SRCMB
,XM.SEQ
,XM.DTA
,XM. FILE
,XM.LIB
,XO.TEXT
,XO.ATTR
FROM
(
XW INNER JOIN XM
ON (XW.VRECN = XM.RECN)
AND (XW.SRCMB = XM.MBR)
AND (
XW.SRCFL = XM. FILE
)
AND (XW.SRCLB = XM.LIB)
)
LEFT OUTER JOIN XO
ON (XW.SRCMB = XO.LOBJ)
WHERE
(XW.NAME = 'DB-NAME-A')
AND XW.SRCMB = 'CLCR0751'
AND XW.SRCFL = 'CBSRC'
AND XW.SRCLB = 'THPCOD_NEW'
ORDER BY
XW.SRCMB
,XM.SEQ;
然后結果很快就出現了,例如2秒。 您能建議我表/查詢中有哪些缺陷嗎?
以及如何提高第一查詢的性能?
在這種情況下,使用存儲過程代替SQL查詢會是一個優勢嗎???
提前致謝
Kishore
您確實在XW
表上有一個索引。 它由unique
子句定義。 這些是索引中的列: SRCLB
, SRCFL
, SRCMB
, NAME
,然后是VARSQ
。
在where
子句中,索引必須從左到右使用-列的順序有所不同。 因此,當您對name
有條件時,無法使用索引。
如果您對SRCLB
, SRCFL
, SRCMB
和SRNAME
,則可以使用索引。
此外,所選擇的數據量由where
子句后過濾很可能是與更平等條件越小在where
子句,而且也將提高性能。
聽起來這只是規模問題。
WHERE子句將每個集合切成碎片。 優化器首先執行那些操作,因此在啟動JOIN時,要做的工作就更少了。 它應該是返回的總行數的函數。
您需要做一些事情:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.