× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Elvis, thanks for the links.  I will check them out.  I don't recognize this
differentiation between view composition and view materialization - can you
provide a quick explanation or some additional links.

Also, what is this "WITH..." syntax - does this lead to "composition"?
"Elvis Budimlic"
<ebudimlic@xxxxxxxxxxxxxxxxxxxxxxxxx>
wrote in message news:000e01c6783a$2fc7fe30$6e01a8c0@xxxxxxxx
> Ryan,
>
> A while back I ran across an IBM article "Art and science of SQL
performance
> tuning" (http://www.common.be/pdffiles/16042002DB2ArtandScience.pdf) and
had
> to chuckle at the title as it sure is more art than science, at least in
my
> experience :)
>
> There are two ways SQL views can be implemented on the DB2 for System i,
> view materialization and view composition.  You want to try and avoid view
> materialization if possible, and it should be possible with your query as
> it's relatively straightforward.
> IBM has been doing a good job of getting more queries toward view
> composition with new query engine (SQE).  So, one thing to make sure is
that
> your query is not going down CQE path (see latest Centerfield article on
the
> method to determine which query engine your statement is hitting -
>
http://www.centerfieldtechnology.com/publications/archive/April%202006.pdf).
>
> Another thing I learned as I'm tuning SQL on System i is that the answer
is
> always "It depends".  There are just too many factors query optimizer
takes
> into consideration when it's making its decisions for anyone to claim
> anything with full certainty.  Another thing that exasperates this
situation
> is that IBM is hard at work changing, enhancing and optimizing the query
> optimizer all the time, so what you know today may be outdated tomorrow.
>
> Query optimization is iterative process so view my suggestion as iteration
1
> and cross your fingers :)
>
> CREATE INDEX T1IDX1 ON T1 (GLLT ASC, GLDSYJ ASC, GLDGJ DESC)
> CREATE INDEX T1IDX2 ON T1 (GLMCU ASC)
> CREATE INDEX T2IDX1 ON T2 (MCMCU ASC)
>
> WITH t AS
> {
> SELECT GLMCU,
>        GLOBJ,
>        GLSUB,
>        GLEXA,
>        GLEXR,
>        GLAA,
>        GLIVD,
>        GLDGJ,
>        GLDCT,
>        GLPO,
>        GLLT,
>        GLDSYJ
> FROM t1
> WHERE GLLT='AA' AND GLDSYJ>=106072 AND GLDGJ<=105365
> }
> SELECT
>   t.GLMCU,
>   t2.MCDC,
>   t2.MCRP01,
>   t.GLOBJ,
>   t.GLSUB,
>   t.GLEXA,
>   t.GLEXR,
>   t.GLAA,
>   t.GLIVD,
>   t.GLDGJ,
>   t.GLDCT,
>   t.GLPO,
>   t.GLLT,
>   t.GLDSYJ
> FROM t INNER JOIN t2 ON t2.MCMCU = t1.GLMCU
>
> Test it first with some simple selects before you building a view on top
of
> it. I'm curious to see what your testing shows.
> Good luck.
>
> Elvis
>
> -----Original Message-----
> Subject: Fun with DB2/400 Optimizer...well, not quite.
>
> I have a recurring problem with the DB2/400 optimizer that I'm hoping
others
> can shed some light on. This post is pretty long (sorry) so I will begin
> with my questions before you guys get tired of reading.  ;-)
>
>
____________________________________________________________________________
> __
> My first issue is that DB2/400 seems to want to table scan WAY more often
on
> this particular data selection than it should.  The selection criteria
only
> selects 4665 records of the 18.5 million in a table.  There is some index
> experimentation I could do here.  For instance, my index is actually
> beginning with my least selective column (GLLT), however I've done this
> because I've had issues in the past by starting with columns I am doing
> range (BETWEEN) or >=/<= selection on.  Is there a way to force the
> optimizer to use indexes, or force it to select the 4665 relevant records
> BEFORE the join???
>
> My second issue is the creation of views.  Most of these queries I have to
> turn into views.  Even after I have a very well tuned query / index
> combination, turning the SQL into a view ALMOST ALWAYS (99%) results in
> table scans.
>
____________________________________________________________________________
> __
>
> Some general info...
>
> Table t1 is about 100 columns wide, has 18.5 million rows, and is 14GB in
> size.  Table t2 is about 50 columns wide, has 4500 rows, and is 3mb in
size
>
> There are lots of indexes, but the relevant ones are:
>
> IDX_T1 (GLLT asc, GLDGJ asc, GLDSYJ asc, GLMCU asc)
> IDX_t2 (MCMCU asc)
>
> Instead of obfuscating with pseudo code, here is the real deal.
>
> Query1:
>
> SELECT t1.GLMCU
> , t2.MCDC
> , t2.MCRP01
> , t1.GLOBJ
> , t1.GLSUB
> , t1.GLEXA
> , t1.GLEXR
> , t1.GLAA
> , t1.GLIVD
> , t1.GLDGJ
> , t1.GLDCT
> , t1.GLPO
> , t1.GLLT
> , t1.GLDSYJ
> FROM t1
> INNER JOIN t2 ON t2.MCMCU = t1.GLMCU
> WHERE t1.GLLT='AA' AND t1.GLDSYJ>=106072 AND t1.GLDGJ<=105365
>
> Results mixed.
> 50%:  TABLE SCAN on t1, TABLE SCAN on t2 with temp hash table, hash join
> 50%:  Index Scan IDX_t1, Index Scan IDX_t2, table probes, then nested loop
> join.
>
> If I turn Query1 into a view and SELECT * FROM View, this ALWAYS results
in
> tables scans and overnight processing.
>
> Query2:
>
> SELECT t1.GLMCU
> , t2.MCDC
> , t2.MCRP01
> , t1.GLOBJ
> , t1.GLSUB
> , t1.GLEXA
> , t1.GLEXR
> , t1.GLAA
> , t1.GLIVD
> , t1.GLDGJ
> , t1.GLDCT
> , t1.GLPO
> , t1.GLLT
> , t1.GLDSYJ
> FROM t1
> INNER JOIN t2 ON t2.MCMCU = t1.GLMCU AND t1.GLLT='AA' AND
t1.GLDSYJ>=106072
> AND t1.GLDGJ<=105365
>
> Results:
> 100%:  Index Scan IDX_t1, Index Scan IDX_t2, table probes, then nested
loop
> join.
>
> If it turn Query 2 into a view and SELECT * FROM View, results are mixed.
> 5%:  Index Scan IDX_t1, Index Scan IDX_t2, table probes, then nested loop
> join.
> 95%  TABLE SCAN on t1, TABLE SCAN on t2 with temp hash table, hash join
>
> Query3:
>
> SELECT t2.MCDC,  t2.MCRP01, ilv1.*
> FROM
> (
> SELECT GLMCU
> , GLOBJ
> , GLSUB
> , GLEXA
> , GLEXR
> , GLAA
> , GLIVD
> , GLDGJ
> , GLDCT
> , GLPO
> , GLLT
> , GLDSYJ
> FROM t1 WHERE GLLT='AA' AND GLDSYJ>=106072 AND GLDGJ<=105365
> ) ilv1
> INNER JOIN t2 ON t2.MCMCU = ilv1.GLMCU
>
> Results:
> 100%:  TABLE SCAN on t1, TABLE SCAN on t2 with temp hash table, hash join
>
> Turning this into a view has same result.
>
>
> Any ideas?
>
>
>
> -- 
> This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing
list
> To post a message email:
MIDRANGE-L@xxxxxxxxxxxx
> To subscribe, unsubscribe, or change list options,
> visit: http://lists.midrange.com/mailman/listinfo/midrange-l
> or email: MIDRANGE-L-request@xxxxxxxxxxxx
> Before posting, please take a moment to review the archives
> at http://archive.midrange.com/midrange-l.
>
>




As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.