> SELECT  rresearch.nu, rresearch.ny, rresearch.nc, rresearch.id 
>
> FROM rresearch 
> WHERE (rresearch.id IS NOT NULL) 
> ORDER BY rresearch.nu, rresearch.ny, rresearch.nc, rresearch.id;
>
> 2920.90ms
>
>
The above query is not used for the grid. Rather, it is used to generate a 
dropdown list for the db.isi_alt_countrynames.rsc_id field in the grid's 
search widget. The db.isi_alt_countrynames.rsc_id is a reference field that 
references db.rresearch, so it gets a default IS_IN_DB(db, 'rresearch.id', 
...) validator. In forms (including the grid search widget), that validator 
results in a <select> widget with an option for each item in 
db.rresearch.id (note, you won't see the select widget unless you first 
click in the grid's search box and then select the "rsc_id" field). Not 
only does the query take a long time to run and parse, but it also takes a 
long time to generate the <select> widget with all the options and send the 
HTML to the browser.

In general, if you create a reference field that references a table with a 
large number of records, you should avoid the default <select> widget for 
that field. You can do this by putting the validator in a list, which will 
prevent the <select> from being created:

db.isi_alt_countrynames.rsc_id.requires = [db.isi_alt_countrynames.rsc_id.
requires]

  

>
> and then one query for each of the rows in the result of the previous query 
> like this 
> (taking between 0.44ms and 0.72ms each):
>
>
>
> SELECT  rresearch.id, rresearch.cn, rresearch.nf, rresearch.nc, 
>
> rresearch.nd, rresearch.nn, rresearch.ny, rresearch.np, rresearch.nu, 
> rresearch.nz, rresearch.uuid 
> FROM rresearch WHERE (rresearch.id = 642117) LIMIT 1 OFFSET 0;
>
> 0.50ms
>

I think the above queries are due to an unnecessary select in the 
"represent" attribute of db.rresearch.id:

vars = dict(country = str(db.rresearch[id].nu))

Note, above, there is no reason to do db.rresearch[id].nu, which results in 
a select. Instead, just do:

vars = dict(country = str(row.nu))

Anthony

-- 

--- 
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to