In addition to this, and assuming that the data doesn't change frequently (days vs minutes), maybe a select-cache, with TTL of 24 hours would help?
http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#Caching-selects

________________________________________
Kiran Subbaraman
http://subbaraman.wordpress.com/about/

On Thu, 22-05-2014 7:39 PM, Anthony wrote:
First, you can simplify your function as follows:

|
defgetResults():
    tab2results =db(db.Table2.Release==request.vars.release_name).select(
                     db.Table2.id,db.Table2.Year,orderby=~db.Table2.id)
returnSELECT([OPTION(r.Year,_value=r.id)forr intab2results],
                  _name='table2_name')
|

I assume request.vars.release_name is actually the db.Table1 id field value, not a string name, correct (otherwise, the query won't work)?

In the above, insert "return BEAUTIFY(db._timings)" before the final return, and call the function directly in a browser tab, with release_name=[some id] in the query string. See how long the above query is taking in that case. If the query itself is taking several seconds, try creating an index on the "Release" field.

Anthony

On Thursday, May 22, 2014 9:38:56 AM UTC-4, Sarbjit wrote:

    Below is the snippets from code (I have changed few field names as
    I can't share the exact field names)

    --> Data base

    db.define_table('Table1',
                    Field('Release'),
                    format='%(Release)s')

    db.define_table('Table2',
                    Field('Release',db.Table1),
                    Field('Year'),
                    format='%(Year)s')

    db.define_table('Table3',
                    Field('Manfucturer',writable=False),
                    Field('MID'),
                    Field('Year',db.Table2,writable=False),
                    Field('Engineer'),
                    Field('Location',writable=False),
                    Field('Title',writable=False),
                    Field('Description','text'),
                    Field('City',writable=False))


    db.Table2.Release.requires = IS_IN_DB(db,db.Table1.id
    <http://db.Table1.id>,'%(Release)s')
    db.Table3.Year.requires = IS_IN_DB(db,db.Table2.id
    <http://db.Table2.id>,'%(Year)s')

    --> This function is called by AJAX on change of first option in
    drop down

    def getResults():
        tab2results =
    
db(db.Table2.Release==request.vars.release_name).select(orderby=~db.Table2.id
    <http://db.Table2.id>)
        result = "<select name='table2_name'>"
        for tab2 in tab2results:
            print tab2
            result += "<option value='" + str(tab2.id
    <http://tab2.id>) + "'>" + tab2.Year + "</option>"
        result += "</select>"
        return XML(result)

    No, I don't have an index for the table.


    On Thursday, May 22, 2014 6:50:02 PM UTC+5:30, Anthony wrote:

        Would still help to see your specific model code. Is the field
        in question a reference field with a "represent" attribute? If
        so, you'll get separate queries for each item in order to
        lookup the represent value. How many records in the table? Do
        you have an index on the field being searched? If you execute
        the same query in a separate DB client, how long does it take?

        Anthony

        On Thursday, May 22, 2014 8:37:55 AM UTC-4, Sarbjit wrote:

            Hi Anthony,

            Code is almost identical to the code posted in slice with
            change in field names and number of records. Only
            additonal difference is that I am using "orderby" in the
            query before returing the results.

            Surprisingly, sometime the result appears fast (within 2-3
            seconds) but some time it takes long time to populate it.

            -Sarbjit

            On Thursday, May 22, 2014 4:46:55 PM UTC+5:30, Anthony wrote:

                Would help to see some code. 4-5 seconds sounds much
                too long.

                You might also look into
                http://dev.s-cubism.com/plugin_lazy_options_widget
                <http://dev.s-cubism.com/plugin_lazy_options_widget>.

                Anthony

                On Thursday, May 22, 2014 12:17:42 AM UTC-4, Sarbjit
                wrote:

                    Hi,

                    I am using cascading drop-down based on the slice
                    posted on
                    
"http://www.web2pyslices.com/slice/show/1526/cascading-drop-down-lists-with-ajax-2
                    
<http://www.web2pyslices.com/slice/show/1526/cascading-drop-down-lists-with-ajax-2>".
                    In my application, the number of sub-records for
                    drop-down are typically in range of 50-60, so
                    every-time I change the first option in drop down,
                    it takes significant time (around 4-5 seconds) to
                    populate my second drop down.

                    I was wondering if there is a way to make this
                    fast by means of caching or by storing the data
                    for all the records the first time when user logs
                    into the system and then using that data. Can some
                    one please comment on how to address this problem
                    and if possible, an example would be helpful.

                    -Sarbjit

--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com <mailto:web2py+unsubscr...@googlegroups.com>.
For more options, visit https://groups.google.com/d/optout.

--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- You received this message because you are subscribed to the Google Groups "web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to