|
SELECT count(*) 类型的SQL (具体见后面) , ORACLE 11.2.0.2 版本
代入以下数值运行耗时:
:B1='AMEUPDUN' 返回12笔数据, 32毫秒
:B1='HWITRCUS' 返回19万数据, 18秒
:B1='JTFTASK' 返回1万数据, 1.5秒
:B1='OKSKPRCS' 无返回数据, 30毫秒
:B1='UMXLHELP' 返回40笔数据,45毫秒
:B1='WFERROR’ 返回2万数据,2.5秒
以下SQL cost或index使用,
------------------------------------------
SELECT count(*)
FROM WF_ITEMS WI
WHERE WI.ITEM_TYPE =:B1 AND WI.END_DATE <= SYSDATE
AND EXISTS
(SELECT NULL
FROM WF_ITEM_TYPES WIT
WHERE WI.END_DATE + NVL (WIT.PERSISTENCE_DAYS, 0) <= SYSDATE
AND WI.ITEM_TYPE = WIT.NAME)
AND NOT EXISTS
( SELECT NULL
FROM WF_ITEMS WI2
WHERE WI2.END_DATE IS NULL
START WITH WI2.ITEM_TYPE = WI.ITEM_TYPE
AND WI2.ITEM_KEY = WI.ITEM_KEY
CONNECT BY PRIOR WI2.ITEM_TYPE = WI2.PARENT_ITEM_TYPE
AND PRIOR WI2.ITEM_KEY = WI2.PARENT_ITEM_KEY
UNION ALL
SELECT NULL
FROM WF_ITEMS WI2
WHERE WI2.END_DATE IS NULL
START WITH WI2.ITEM_TYPE = WI.ITEM_TYPE
AND WI2.ITEM_KEY = WI.ITEM_KEY
CONNECT BY PRIOR WI2.PARENT_ITEM_TYPE = WI2.ITEM_TYPE
AND PRIOR WI2.PARENT_ITEM_KEY = WI2.ITEM_KEY)
ITEM_TYPE 上未收集Histogram .
因为文档上说,Oracle 在界定skew的时候还不是用重复值来界定的。oracle认为的倾斜列是指在列中最大值和最小值之间分布不均匀,即使它是唯一的(PK, 比如1--200,1000-3000,10000--12000, 也会收集柱状图, 如果是连续的就不会收集了)。
见如下数据分布, 最大值和最小值之间分布应该是非常不均匀吧 。
SELECT ITEM_TYPE , Count(1) FROM WF_ITEMS Group By ITEM_TYPE ;
AMEUPDUN 12
CS_KB_W1 8
HWITRCUS 198779
IBUSRDTL 3748
JTAUMEMN 6
JTAUMPSW 9177
JTFEC 42
JTFTASK 26299
JTF_APPR 23
OKCAUKAP 2
OKSKPRCS 8479
SERVEREQ 138319
UMXLHELP 1398
WFERROR 253766
WFTESTS 3
|
|