Hmm, not sure what's going on. What happens if you remove the virtual field?
On Thursday, July 5, 2012 5:25:55 PM UTC-4, Santiago wrote:
>
> 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 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
>>>
>>>
>