db.executesql(db(db.voting_center)._select()) takes only a few seconds
It has one virtual field, but it is lazy. I think it is not necessary, but
I'm pasting the code below, is case you want to take a look.
class VotingCenterVirtualField(object):
def delete_results(self):
def lazy(self=self):
r1 = r2 = r3 = True
if self.voting_center.definitive:
r = db.result(self.voting_center.definitive)
log_delete(r.as_dict())
r1 = r.delete_results() and r.delete_record()
if self.voting_center.provisional:
r = db.result(self.voting_center.provisional)
log_delete(r.as_dict())
r2 = r.delete_results() and r.delete_record()
for ps in self.voting_center.polling_station.select():
r3 = r3 and db.polling_station(ps.id).delete_results()
return r1 and r2 and r3
return lazy
Thanks,
Regards
Santiago
On Thu, Jul 5, 2012 at 6:17 PM, Anthony <[email protected]> wrote:
> After executing the query, the DAL processes the returned results in order
> to create a Rows object. That process takes longer the more fields and the
> more rows there are, but 40 minutes still sounds excessive for 66K rows.
> How long does it take if you do
> db.executesql(db(db.voting_center)._select()), which will run the SQL
> generated by the DAL but will not parse the results into a Rows object?
> What does your db.voting_center table definition look like? Any virtual
> fields (in particular, that do additional queries)?
>
> Anthony
>
>
> On Thursday, July 5, 2012 5:08:01 PM UTC-4, Santiago wrote:
>>
>> Hello,
>>
>> Do you know why the same query, takes more than 40 minutes to get
>> resolved using DAL and less than a second using raw SQL ?
>>
>> This is the code using DAL
>>
>> db(db.voting_center).select()
>>
>> This is the code using raw SQL
>>
>> db.executesql('SELECT voting_center.id, voting_center.election,
>> voting_center.full_id_indra, voting_center.latitude,
>> voting_center.longitude, voting_center.geometry, voting_center.circuit,
>> voting_center.name, voting_center.identification, voting_center.cue,
>> voting_center.annex, voting_center.source, voting_center.external_id,
>> voting_center.locality, voting_center.address, voting_center.provisional,
>> voting_center.definitive FROM voting_center WHERE (voting_center.id >
>> 0);')
>>
>> electoral-dev=# select count(1) from voting_center;
>> count
>> -------
>> 66442
>> (1 row)
>>
>> Column | Type |
>> Modifiers | Storage | Description
>> ----------------+-------------**-----------+------------------**
>> ------------------------------**------------+----------+------**-------
>> id | integer | not null default
>> nextval('voting_center_id_seq'**::regclass) | plain |
>> election | integer | not null
>> | plain |
>> latitude | character varying(512) |
>> | extended |
>> longitude | character varying(512) |
>> | extended |
>> circuit | integer |
>> | plain |
>> identification | character varying(512) | not null
>> | extended |
>> cue | character varying(512) |
>> | extended |
>> annex | character varying(512) |
>> | extended |
>> source | character varying(512) |
>> | extended |
>> external_id | character varying(512) |
>> | extended |
>> locality | character varying(512) |
>> | extended |
>> address | character varying(512) |
>> | extended |
>> provisional | integer |
>> | plain |
>> definitive | integer |
>> | plain |
>> geometry | geometry |
>> | main |
>> name | character varying(512) | not null
>> | extended |
>> full_id_indra | character varying(12) |
>> | extended |
>>
>> Thanks in advance
>> Santiago
>>
>>
> On Thursday, July 5, 2012 5:08:01 PM UTC-4, Santiago wrote:
>>
>> Hello,
>>
>> Do you know why the same query, takes more than 40 minutes to get
>> resolved using DAL and less than a second using raw SQL ?
>>
>> This is the code using DAL
>>
>> db(db.voting_center).select()
>>
>> This is the code using raw SQL
>>
>> db.executesql('SELECT voting_center.id, voting_center.election,
>> voting_center.full_id_indra, voting_center.latitude,
>> voting_center.longitude, voting_center.geometry, voting_center.circuit,
>> voting_center.name, voting_center.identification, voting_center.cue,
>> voting_center.annex, voting_center.source, voting_center.external_id,
>> voting_center.locality, voting_center.address, voting_center.provisional,
>> voting_center.definitive FROM voting_center WHERE (voting_center.id >
>> 0);')
>>
>> electoral-dev=# select count(1) from voting_center;
>> count
>> -------
>> 66442
>> (1 row)
>>
>> Column | Type |
>> Modifiers | Storage | Description
>> ----------------+-------------**-----------+------------------**
>> ------------------------------**------------+----------+------**-------
>> id | integer | not null default
>> nextval('voting_center_id_seq'**::regclass) | plain |
>> election | integer | not null
>> | plain |
>> latitude | character varying(512) |
>> | extended |
>> longitude | character varying(512) |
>> | extended |
>> circuit | integer |
>> | plain |
>> identification | character varying(512) | not null
>> | extended |
>> cue | character varying(512) |
>> | extended |
>> annex | character varying(512) |
>> | extended |
>> source | character varying(512) |
>> | extended |
>> external_id | character varying(512) |
>> | extended |
>> locality | character varying(512) |
>> | extended |
>> address | character varying(512) |
>> | extended |
>> provisional | integer |
>> | plain |
>> definitive | integer |
>> | plain |
>> geometry | geometry |
>> | main |
>> name | character varying(512) | not null
>> | extended |
>> full_id_indra | character varying(12) |
>> | extended |
>>
>> Thanks in advance
>> Santiago
>>
>>