I mistyped -20 in my original Post, both dates are the same. So it is
-12.
However this has no effect on the query though because the data goes
back only to 2002!

It looks like the fast query is even faster with the new version.

Thanks Noel,


Dani


EXPLAIN ANALYZE...

Plan for the slow one:

SELECT
    ANLKURSE.ANLDETAIL_WKN,
    ANLKURSE.DATUM,
    ANLKURSE.KURS,
    A.MAXKURS,
    A.MINKURS,
    A.AVGKURS,
    A.COUNTKURS
FROM PUBLIC.ANLKURSE
    /* PUBLIC.PRIMARY_KEY_E: ANLDETAIL_WKN = '840400'
        AND DATUM > DATEADD('YEAR', -12, CURRENT_DATE())
     */
    /* WHERE (ANLKURSE.ANLDETAIL_WKN = '840400')
        AND (ANLKURSE.DATUM > DATEADD('YEAR', -12, CURRENT_DATE()))
    */
    /* scanCount: 2590 */
INNER JOIN (
    SELECT
        ANLKURSE.ANLDETAIL_WKN,
        MAX(ANLKURSE.KURS) AS MAXKURS,
        MIN(ANLKURSE.KURS) AS MINKURS,
        AVG(ANLKURSE.KURS) AS AVGKURS,
        COUNT(ANLKURSE.KURS) AS COUNTKURS
    FROM PUBLIC.ANLKURSE
        /* PUBLIC.PRIMARY_KEY_E: ANLDETAIL_WKN = '840400'
            AND DATUM > DATEADD('YEAR', -12, CURRENT_DATE())
         */
    WHERE (ANLKURSE.ANLDETAIL_WKN = '840400')
        AND (ANLKURSE.DATUM > DATEADD('YEAR', -12, CURRENT_DATE()))
) A
    /* SELECT
        ANLKURSE.ANLDETAIL_WKN,
        MAX(ANLKURSE.KURS) AS MAXKURS,
        MIN(ANLKURSE.KURS) AS MINKURS,
        AVG(ANLKURSE.KURS) AS AVGKURS,
        COUNT(ANLKURSE.KURS) AS COUNTKURS
    FROM PUBLIC.ANLKURSE
        /++ PUBLIC.PRIMARY_KEY_E: ANLDETAIL_WKN = '840400'
            AND DATUM > DATEADD('YEAR', -12, CURRENT_DATE())
         ++/
    WHERE (ANLKURSE.ANLDETAIL_WKN = '840400')
        AND (ANLKURSE.DATUM > DATEADD('YEAR', -12, CURRENT_DATE()))
    HAVING ANLKURSE.ANLDETAIL_WKN IS ?1: ANLDETAIL_WKN =
ANLKURSE.ANLDETAIL_WKN
        AND ANLDETAIL_WKN = ANLKURSE.ANLDETAIL_WKN
     */
    ON 1=1
    /* scanCount: 5178 */
WHERE (A.ANLDETAIL_WKN = ANLKURSE.ANLDETAIL_WKN)
    AND ((ANLKURSE.ANLDETAIL_WKN = '840400')
    AND (ANLKURSE.DATUM > DATEADD('YEAR', -12, CURRENT_DATE())))
ORDER BY 2


Plan for the fast one:

SELECT
    ANLKURSE.ANLDETAIL_WKN,
    ANLKURSE.DATUM,
    ANLKURSE.KURS,
    A.MAXKURS,
    A.MINKURS,
    A.AVGKURS,
    A.COUNTKURS
FROM PUBLIC.ANLKURSE
    /* PUBLIC.PRIMARY_KEY_E: ANLDETAIL_WKN = '840400'
        AND DATUM > '2000-12-01'
     */
    /* WHERE (ANLKURSE.ANLDETAIL_WKN = '840400')
        AND (ANLKURSE.DATUM > '2000-12-01')
    */
    /* scanCount: 2590 */
INNER JOIN (
    SELECT
        ANLKURSE.ANLDETAIL_WKN,
        MAX(ANLKURSE.KURS) AS MAXKURS,
        MIN(ANLKURSE.KURS) AS MINKURS,
        AVG(ANLKURSE.KURS) AS AVGKURS,
        COUNT(ANLKURSE.KURS) AS COUNTKURS
    FROM PUBLIC.ANLKURSE
        /* PUBLIC.PRIMARY_KEY_E: ANLDETAIL_WKN = '840400'
            AND DATUM > '2000-12-01'
         */
    WHERE (ANLKURSE.ANLDETAIL_WKN = '840400')
        AND (ANLKURSE.DATUM > '2000-12-01')
) A
    /* SELECT
        ANLKURSE.ANLDETAIL_WKN,
        MAX(ANLKURSE.KURS) AS MAXKURS,
        MIN(ANLKURSE.KURS) AS MINKURS,
        AVG(ANLKURSE.KURS) AS AVGKURS,
        COUNT(ANLKURSE.KURS) AS COUNTKURS
    FROM PUBLIC.ANLKURSE
        /++ PUBLIC.PRIMARY_KEY_E: ANLDETAIL_WKN = '840400'
            AND DATUM > '2000-12-01'
         ++/
    WHERE (ANLKURSE.ANLDETAIL_WKN = '840400')
        AND (ANLKURSE.DATUM > '2000-12-01')
    HAVING ANLKURSE.ANLDETAIL_WKN IS ?1: ANLDETAIL_WKN =
ANLKURSE.ANLDETAIL_WKN
        AND ANLDETAIL_WKN = ANLKURSE.ANLDETAIL_WKN
     */
    ON 1=1
    /* scanCount: 5178 */
WHERE (A.ANLDETAIL_WKN = ANLKURSE.ANLDETAIL_WKN)
    AND ((ANLKURSE.ANLDETAIL_WKN = '840400')
    AND (ANLKURSE.DATUM > '2000-12-01'))
ORDER BY 2

-- 
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/h2-database?hl=en.

Reply via email to