gpt4 book ai didi

java - DB2 对 JDBC 查询中多个 JOIN 响应缓慢

转载 作者:行者123 更新时间:2023-12-01 08:05:47 26 4
gpt4 key购买 nike

我在 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 查询会有优势吗???

提前致谢

基肖尔

最佳答案

您在 XW 表上确实有一个索引。它由 unique 子句定义。这些是索引中的列:SRCLBSRCFLSRCMBNAMEVARSQ .

where 子句中,索引必须从左到右使用——列的顺序会有所不同。因此,当您对name有条件时,就无法使用索引。

当您在 SRCLBSRCFLSRCMBSRNAME 上有条件时,索引可以被使用。

此外,如果where子句中的相等条件较多,则过滤后的where子句选择的数据量可能会更小,这也会提高性能.

关于java - DB2 对 JDBC 查询中多个 JOIN 响应缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21753904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com