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