下面这个query运行的非常慢。表的索引如下:
LOAN_DTLGBACCTNot Null constraint, Indexed.
LOAN_DTLGBAPP
GLB_DTLGDACCTNot Null constraint, Indexed.
GLB_DTL GDAPP
CROSSREF_DTLGBCIFIndexed.
CROSSREF_DTLGBACCTNot Null constraint, Indexed.
CUST_DTLGBNBRNot Null constraint, Indexed.
如果用create table as (subquery) 建一个tmp 表, 只用不到一分钟。(1500 records)。再把tmp表和GLB_DTL外连接, 也是不到一分钟。 可是, 运行query确需要1个多小时。GLB_DTL 有150,0000纪录。
SELECT COUNT(*)
FROM (SELECT LOAN.GBACCT,
LOAN.GBAPP,
GLB_DTL.GDACCT,
GLB_DTL.GDAPP,
LOAN.GBAFC
FROM (SELECT ILD.*
FROM LOAN_DTL ILD, (SELECT DISTINCT CROSSREF_DTL.GBACCT
FROM CROSSREF_DTL,
CUST_DTL
WHERE CROSSREF_DTL.GBCIF =
CUST_DTL.GBNBR) A
WHERE A.GBACCT =ILD.GBACCT
)
LOAN,
GLB_DTL
WHERE GLB_DTL.GDACCT = LOAN.GBACCT(+));
|