У меня 3 различных таблиц (без какого-либо первичного или внешнего ключа) в базе данных DB2 вМедленная реакция DB2 на нескольких соединений в запросе от JDBC
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-запроса преимуществом в этом случае ???
Заранее спасибо
Кишор
Как сказал @duffymo, вам нужно посмотреть, что пытается сделать оптимизатор. Вы не указали первичный ключ и не индексы, которые говорят мне, что, скорее всего, сканирование таблицы происходит.«Distinct» и «Order By» могут также сильно повлиять на производительность. В вашем втором 'Select' есть предложения' Where', что означает, что он сужает область каждого набора данных на каждом шаге. Утомляйтесь, что выполнение через клиента может быть оптимизировано иначе, чем через JDBC. Я просто столкнулся с этой проблемой с MS SQL, где выбор работал отлично на клиенте и убил сервер через JDBC. – CodeChimp
@duffymo, я просто попытался выполнить тот же запрос на VIEWS вместо таблиц. Но это также потребляет то же время. – Kishore
Будет ли использование Хранимой процедуры вместо SQL-запроса преимуществом в этом случае ??? – Kishore