Hi Kartweel,
On Tuesday, April 23, 2013 10:37:25 AM UTC+2, Kartweel wrote:
If you can post the create view
statement & running the select manually, both with the
execution plans, then it might provide some insight?
you can find the statement and the two execution plans at the end of this post.
You also say if you drop and re-create the view then it is
better?
Yes.
. Are you creating the view, then populating the tables,
then running the view?
Yes.
I did and I observed changes in COLUMNS.SELECTIVITY but it did not affect the execution plan of the view.
Cheers, Niko
And here comes the code (due to company policies I had to do some obfuscation):
-- Statement
SELECT
TAB01.TAB03_ID AS ATT01
,TAB02.TAB03_ID AS ATT05
,TAB02.ATT02
,TAB02.ATT03
,TAG.ATT04 AS ATT06
,TAB02.ATT14
,GES.ATT04 AS ATT07
,VERP.ATT08
,VERP.ATT09
,VERP.ATT10
,VERP.ATT11
,VERP.ATT12
,TIT.ATT13
,U.ATT15
,VP.ATT16
,VP.ATT17
,VP.ATT18
,VP.ATT19
FROM TAB03 TAB01
JOIN TAB04 U ON TAB01.ATT20 = U.ATT21
JOIN TAB05 P ON U.ATT22 = P.ATT23
JOIN TAB06 PP ON P.ATT23 = PP.ATT24
JOIN TAB05 VERP ON PP.ATT25 = VERP.ATT23
JOIN TAB07 V ON V.ATT26 = PP.ATT27
JOIN TAB03 TAB02 ON V.ATT28 = TAB02.ATT29
JOIN TAB08 VP on V.ATT28 = vp.ATT29
LEFT JOIN TAB09 TAG ON TAB02.ATT30 = TAG.ATT31
LEFT JOIN TAB09 GES ON TAB02.ATT32 = GES.ATT31
LEFT JOIN TAB10 TIT ON P.ATT33 = TIT.ATT34
-- EXPLAIN for the view (the bad one)
SELECT
TAB01.TAB03_ID AS ATT01,
TAB02.TAB03_ID AS ATT05,
TAB02.ATT02,
TAB02.ATT03,
TAG.ATT04 AS ATT06,
TAB02.ATT14,
GES.ATT04 AS ATT07,
VERP.ATT08,
VERP.ATT09,
VERP.ATT10,
VERP.ATT11,
VERP.ATT12,
TIT.ATT13,
U.ATT15,
VP.ATT16,
VP.ATT17,
VP.ATT18,
VP.ATT19
FROM PUBLIC.TAB06 PP
/++ PUBLIC.TAB06.tableScan ++/
INNER JOIN PUBLIC.TAB05 P
/++ PUBLIC.PRIMARY_KEY_48F: ATT23 = PP.ATT24 ++/
ON 1=1
/++ WHERE P.ATT23 = PP.ATT24
++/
INNER JOIN PUBLIC.TAB03 TAB02
/++ PUBLIC.TAB03.tableScan ++/
ON 1=1
INNER JOIN PUBLIC.TAB08 VP
/++ PUBLIC.TAB08.tableScan ++/
ON 1=1
LEFT OUTER JOIN PUBLIC.TAB09 TAG
/++ PUBLIC.PRIMARY_KEY_C9E: ATT31 = TAB02.ATT30 ++/
ON TAB02.ATT30 = TAG.ATT31
LEFT OUTER JOIN PUBLIC.TAB09 GES
/++ PUBLIC.PRIMARY_KEY_C9E: ATT31 = TAB02.ATT32 ++/
ON TAB02.ATT32 = GES.ATT31
LEFT OUTER JOIN PUBLIC.TAB10 TIT
/++ PUBLIC.PRIMARY_KEY_C8B: ATT34 = P.ATT33 ++/
ON P.ATT33 = TIT.ATT34
INNER JOIN PUBLIC.TAB03 TAB01
/++ PUBLIC.TAB03.tableScan ++/
ON TRUE
INNER JOIN PUBLIC.TAB04 U
/++ PUBLIC.PRIMARY_KEY_E9: ATT21 = TAB01.ATT20 ++/
ON TRUE
/++ WHERE (U.ATT22 = P.ATT23)
AND (TAB01.ATT20 = U.ATT21)
++/
INNER JOIN PUBLIC.TAB05 VERP
/++ PUBLIC.PRIMARY_KEY_48F: ATT23 = PP.ATT25 ++/
ON TRUE
/++ WHERE PP.ATT25 = VERP.ATT23
++/
INNER JOIN PUBLIC.TAB07 V
/++ PUBLIC.PRIMARY_KEY_CA: ATT28 = VP.ATT29
AND ATT28 = TAB02.ATT29
++/
ON TRUE
WHERE (V.ATT28 = VP.ATT29)
AND ((V.ATT28 = TAB02.ATT29)
AND ((V.ATT26 = PP.ATT27)
AND ((PP.ATT25 = VERP.ATT23)
AND ((P.ATT23 = PP.ATT24)
AND ((U.ATT22 = P.ATT23)
AND (TAB01.ATT20 = U.ATT21))))))
-- EXPLAIN ANALYZE for the select (the good one)
SELECT
TAB01.TAB03_ID AS ATT01,
TAB02.TAB03_ID AS ATT05,
TAB02.ATT02,
TAB02.ATT03,
TAG.ATT04 AS ATT06,
TAB02.ATT14,
GES.ATT04 AS ATT07,
VERP.ATT08,
VERP.ATT09,
VERP.ATT10,
VERP.ATT11,
VERP.ATT12,
TIT.ATT13,
U.ATT15,
VP.ATT16,
VP.ATT17,
VP.ATT18,
VP.ATT19
FROM PUBLIC.TAB03 TAB02
/* PUBLIC.TAB03.tableScan */
/* scanCount: 399 */
INNER JOIN PUBLIC.TAB07 V
/* PUBLIC.PRIMARY_KEY_CA: ATT28 = TAB02.ATT29 */
ON 1=1
/* WHERE V.ATT28 = TAB02.ATT29
*/
/* scanCount: 651 */
INNER JOIN PUBLIC.TAB06 PP
/* PUBLIC.PRIMARY_KEY_F8: ATT27 = V.ATT26 */
ON 1=1
/* WHERE V.ATT26 = PP.ATT27
*/
/* scanCount: 506 */
INNER JOIN PUBLIC.TAB05 P
/* PUBLIC.PRIMARY_KEY_48F: ATT23 = PP.ATT24 */
ON 1=1
/* WHERE P.ATT23 = PP.ATT24
*/
/* scanCount: 506 */
INNER JOIN PUBLIC.TAB08 VP
/* PUBLIC.IDX_VERSPOS_FK_01: ATT29 = V.ATT28
AND ATT29 = V.ATT28
*/
ON 1=1
/* WHERE V.ATT28 = VP.ATT29
*/
/* scanCount: 579 */
LEFT OUTER JOIN PUBLIC.TAB09 TAG
/* PUBLIC.PRIMARY_KEY_C9E: ATT31 = TAB02.ATT30 */
ON TAB02.ATT30 = TAG.ATT31
/* scanCount: 334 */
LEFT OUTER JOIN PUBLIC.TAB09 GES
/* PUBLIC.PRIMARY_KEY_C9E: ATT31 = TAB02.ATT32 */
ON TAB02.ATT32 = GES.ATT31
/* scanCount: 577 */
LEFT OUTER JOIN PUBLIC.TAB10 TIT
/* PUBLIC.PRIMARY_KEY_C8B: ATT34 = P.ATT33 */
ON P.ATT33 = TIT.ATT34
/* scanCount: 326 */
INNER JOIN PUBLIC.TAB03 TAB01
/* PUBLIC.TAB03.tableScan */
ON 1=1
/* scanCount: 130074 */
INNER JOIN PUBLIC.TAB04 U
/* PUBLIC.PRIMARY_KEY_E9: ATT21 = TAB01.ATT20
AND ATT21 = TAB01.ATT20
*/
ON 1=1
/* WHERE (U.ATT22 = P.ATT23)
AND (TAB01.ATT20 = U.ATT21)
*/
/* scanCount: 217116 */
INNER JOIN PUBLIC.TAB05 VERP
/* PUBLIC.PRIMARY_KEY_48F: ATT23 = PP.ATT25
AND ATT23 = PP.ATT25
*/
ON 1=1
/* scanCount: 652 */
WHERE (V.ATT28 = VP.ATT29)
AND ((V.ATT28 = TAB02.ATT29)
AND ((V.ATT26 = PP.ATT27)
AND ((PP.ATT25 = VERP.ATT23)
AND ((P.ATT23 = PP.ATT24)
AND ((U.ATT22 = P.ATT23)
AND (TAB01.ATT20 = U.ATT21))))))