[ 
https://issues.apache.org/jira/browse/DERBY-4675?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12872030#action_12872030
 ] 

geoff hendrey commented on DERBY-4675:
--------------------------------------

Here is the optimizer dump. Estimated cost is 207956.54. Perhaps it is due to 
the string concatenation (I am selecting an expression that references other 
columns).

2010-05-26 18:17:34.966 GMT Thread[qtp0-0,5,main] (XID = 354560), (SESSIONID = 
3), SELECT
"r"."PK" AS "r.PK",
        '<a href="http://localhost:8080/nextdb/rest/geoff/PHOTOS/USER_PIC/row/' 
|| TRIM(CHAR("r".PK)) || '/pic.' || SUBSTR( "pic_CONTENT_TYPE", 
LOCATE('/',"pic_CONTENT_TYPE")+1) || '" target="_self">show</a>' AS "r.pic",
        "r"."pic_CONTENT_TYPE" AS "r.pic_CONTENT_TYPE",
        "r"."pic_LENGTH" AS "r.pic_LENGTH",
        "r"."pic_FID" AS "r.pic_FID",
        "r"."title" AS "r.title",
        "r"."date" AS "r.date",
        "r"."public" AS "r.public"
FROM
        "GEOFF__PHOTOS__USER_PIC" AS "r"
OFFSET
         40 ROWS FETCH NEXT 10 ROWS ONLY ******* Scroll Insensitive ResultSet:
Number of opens = 1
Rows seen = 20
Number of reads from hash table = 20
Number of writes to hash table = 10
        constructor time (milliseconds) = 0
        open time (milliseconds) = 0
        next time (milliseconds) = 0
        close time (milliseconds) = 0
        optimizer estimated row count:           82.00
        optimizer estimated cost:       207956.54

Source result set:
        Row Count (1):
        Number of opens = 1
        Rows seen = 10
        Rows filtered = 40
                constructor time (milliseconds) = 0
                open time (milliseconds) = 0
                next time (milliseconds) = 0
                close time (milliseconds) = 0
                optimizer estimated row count:           82.00
                optimizer estimated cost:       207956.54

        Source result set:
                Project-Restrict ResultSet (3):
                Number of opens = 1
                Rows seen = 50
                Rows filtered = 0
                restriction = false
                projection = true
                        constructor time (milliseconds) = 0
                        open time (milliseconds) = 0
                        next time (milliseconds) = 0
                        close time (milliseconds) = 0
                        restriction time (milliseconds) = 0
                        projection time (milliseconds) = 0
                        optimizer estimated row count:           82.00
                        optimizer estimated cost:       207956.54

                Source result set:
                        Table Scan ResultSet for GEOFF__PHOTOS__USER_PIC at 
read uncommitted isolation level using share row locking chosen by the optimizer
                        Number of opens = 1
                        Rows seen = 50
                        Rows filtered = 0
                        Fetch Size = 16
                                constructor time (milliseconds) = 0
                                open time (milliseconds) = 0
                                next time (milliseconds) = 0
                                close time (milliseconds) = 0
                                next time in milliseconds/row = 0

                        scan information:
                                Bit set of columns fetched={0, 2, 3, 4, 5, 6, 7}
                                Number of columns fetched=7
                                Number of pages visited=58
                                Number of rows qualified=64
                                Number of rows visited=67
                                Scan type=heap
                                start position:
                                        null
                                stop position:
                                        null
                                qualifiers:
                                        None
                                optimizer estimated row count:           82.00
                                optimizer estimated cost:       207956.54

> OFFSET/FETCH SYNTAX EFFICIENCY
> ------------------------------
>
>                 Key: DERBY-4675
>                 URL: https://issues.apache.org/jira/browse/DERBY-4675
>             Project: Derby
>          Issue Type: Improvement
>    Affects Versions: 10.6.1.0
>         Environment: unix
>            Reporter: geoff hendrey
>
> Using OFFSET and FETCH isn't any faster for paging than using existing JDBC 
> methods:
> //p is page number, n is rows per page
> setMaxRows(n*p);
> setFetchSize(n);
> //...
> rs.absolute((p-1)*n);
> When used on a table with blobs, both the JDBC way, and the OFFSET/FETCH way 
> are unexpectedly slow ('unexpectedly' because I am not even retrieving the 
> BLOB column).
> I need a way to do paging that doesn't slow down proportionately to the page 
> I am requesting. It must also maintain this performance on tables with blobs. 
> Following is discussion from users mail list, year or so ago.
> > 2) what are the performance implications for users of the embedded
> > driver? In particular, with the embedded driver I am hoping that
> > this feature allows portions of a result set to be retrieved without
> > the overhead of retrieving the entire result set. For example, if I
> I am afraid that with embedded driver, you will only save a little CPU
> (by avoiding some JDBC calls) since under the hood, the code siphons
> off the rows till it hits the offset, so if you have a large offset,
> you will still incur reading of those rows (modulo page caching). In
> client/server driver context the savings are larger, of course, in
> that fewer rows are sent over the wire. For simple queries that can
> use an index, the optimizer could make use of the offset information
> to avoid reading the entire row when skipping rows before offset, just
> counting rows in the index to get to the first qualifying row, but
> this optimization is not yet implemented.
> Often, this feature is used together with ORDER BY which would entail
> some sorting of the result set and then all the rows would have to be
> read anyway. Again, for some simple queries, sort avoidance is used by
> the optimizer, so optimization is still possible for for such queries.
> If you think this optimization is an important capability feel free to
> file an improvement issue for it.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to