sqlite3 performance problems only in python

Stef Mientki stef.mientki at gmail.com
Thu Jul 23 09:02:45 EDT 2009


Tim Chase wrote:
>> until now I used only small / simple databases in Python with sqlite3.
>> Now I've a large and rather complex database.
>>
>> The most simple query (with just a result of 100 rows),
>> takes about 70 seconds.
>> And all that time is consumed in "cursor.fetchall"
>>
>> Using the same database in Delphi,
>> using the same query,
>> takes less than 5 seconds (including displaying the full table in a 
>> grid).
>
> While it may seem obvious, are you doing anything time-consuming with 
> those results?  Or have you tested just doing the fetchall() without 
> doing any further processing?  I'm curious on the timing of
>
>   sql = "..."
>   start = time()
>   cursor.execute(sql)
>   rows = cursor.fetchall()
>   end = time()
>   print end-start
No this is exactly what I did,
I timed the execute and fetchall seperatly:
execute: 125 msec
fetchall: 71000 msec  (returning 100 rows and 25 columns)
pysqlite:  version 2.3.2

btw, I don't know if it's of any importance, the SQL-statement I perform is
select OPNAMEN.*, NAME, NAME_, SCORES.SCORE, PATIENT.*
  from OPNAMEN
    inner join POID_VLID          on OPNAMEN.POID            = 
POID_VLID.POID
    inner join VRAAGLST           on VRAAGLST.VLID           = 
POID_VLID.VLID
    inner join VLID_SSID          on VRAAGLST.VLID           = 
VLID_SSID.VLID
    inner join SUBSCHAAL_GEGEVENS on SUBSCHAAL_GEGEVENS.SSID = 
VLID_SSID.SSID
    inner join POID_SSID_SCID     on ( OPNAMEN.POID            = 
POID_SSID_SCID.POID ) and
                                     ( SUBSCHAAL_GEGEVENS.SSID = 
POID_SSID_SCID.SSID )
    inner join SCORES             on SCORES.SCID             = 
POID_SSID_SCID.SCID
    inner join PID_POID           on OPNAMEN.POID            = PID_POID.POID
    inner join PATIENT            on PATIENT.PID             = PID_POID.PID
  where substr ( lower( NAME) , 1, 6)  = 'cis20r'
    and lower ( NAME_ ) = 'fatigue'
    and TEST_COUNT in (3,4)
    and DATETIME > 39814.0
    and SCORE < 30

cheers,
Stef

>
> with no other processing.  I regularly write sql that's fairly complex 
> and brings back somewhat large datasets (sometimes in sqlite), and 
> have never experienced problems with "simple quer[ies] (with just a 
> result of 100 rows" taking such extrordinary times
>
> The answer from the above code will help determine whether it's the 
> sqlite portion that's crazy (and might need some well-placed index 
> statements; though if your Delphi code is fine, I suspect not), or if 
> it's your application code that goes off into left field with the 
> resulting data.
>
> -tkc
>
>
>
>




More information about the Python-list mailing list