So, basically you're doing ....
"get me 150K rows, put them in a list"
"for each of them, query the db for permission"
"if query doesn't return True, scan the 150K list and remove this instance"

Cycling 150K and removing from a list while checking surely will get your 
app killed. 
Firing one query for each row is what seems the problem on the "half-dozen" 
set.
Try the 'accessible-query' way ....
rows = db(auth.accessible_query('read', db.my_table, 
auth.user_id)).select(db.my_table.ALL)
This will do all the required joins "under the hood" and resolve in 
one-query only.

On Thursday, March 21, 2013 12:59:57 PM UTC+1, weheh wrote:
>
> I have a table that represents a group, which has permissions on a 
> row-by-row basis. User belongs to certain number of groups, and the rows 
> into the table are kept for convenience sake. I would like to screen that 
> list of rows for a specific permission and exclude those rows from the 
> list. The code looks like this:
>
> for row in rows:
>     if not auth.has_permission('update', db.my_table, row):
>         rows.remove(row)
>
> Problem is, the auth.has_permission is slow ... on the order of 1.5 
> seconds when scanning a half-dozen row entries. my_table has around 150K 
> rows. How do I speed this up?
>
>
>
>

-- 

--- 
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