pysqlite super langsam?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Hardware
User
Beiträge: 16
Registriert: Samstag 15. April 2006, 14:18

ich habe eine tabelle mit 9300 rows auf einer disk datenbank
ein select count dauert da ca. 1s auf einem p4 mit 3ghz
kann das normal sein?
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Kann ... hast du häufig z.B. einen Int Datentyp vorhanden? Meinen Infos nach bildet pySQlite z.B. Int Werte nicht einheitlich codiert (8 Byte, 16 Byte), etc. ab, sondern gerade nur mit "soviel wie notwendig". Dadurch kommen zwar (in Relation zu anderen DMBS Instanzen) kleine DB-Dateien zu stande, aber das "durcharbeiten" dauert länger.
BlackJack

Falls es wirklich ein "SELECT count(*) FROM foo" ist, dann sollte die Kodierung von Zellen egal sein.

Kannst Du etwas mehr über die Tabelle und die genaue Abfrage verraten?
Hardware
User
Beiträge: 16
Registriert: Samstag 15. April 2006, 14:18

liegt am python interpreter
wenn ich das compiled ablaufen lasse ist es 20x schneller
?????????????????
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Meinst du mit compiled C (oder anderen) Code?

Poste doch mal einfach deinen Pythoncode
Hardware
User
Beiträge: 16
Registriert: Samstag 15. April 2006, 14:18

Joghurt hat geschrieben:Meinst du mit compiled C (oder anderen) Code?

Poste doch mal einfach deinen Pythoncode
ist einfach ein select count * from foo

als py ewig langsam
als exe py2exe wesentlich schneller
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Py2exe kompiliert auch nicht.

Python code wird immer als Bytecode ausgeführt.

No Code, No Party - ähm - no help possible
Hardware
User
Beiträge: 16
Registriert: Samstag 15. April 2006, 14:18

ist wirklich sehr komisch

py2exe macht es extrem schneller

Code: Alles auswählen

        #print "start qry"

        #qry = "SELECT COUNT(hash) FROM cache"
        #qry = "select  count(  piece_id)  from cache "
        #print qry
        self.cur.execute(qry)
        res = self.cur.fetchall()
        if res == []:
            return 0
        #print res
        res = res[0]
        #print "end qry"
        #print res
der qry geht da immer ca 1s (von "start qry" bis "end qry")
hab schon alle Arten von count probiert
ist aber kein Problem da es ja mit dem py2exe geht

Edit (Leonidas): Code in Python-Tags gesetzt.
mr.hide
User
Beiträge: 108
Registriert: Montag 29. August 2005, 14:02

ich denke nicht dass das an der DB Verbindung liegt, sondern eher daran dass er beim Aufrufen eines Python Files an sich länger braucht als beim aufrufen einer py2exe. - Zumindest meine Erfahrungen.

Evtl. liegt das ja daran dass er bei py2exe nur einen abgespeckten Interpreter lädt.

Probier doch mal folgendes, lass so ein Skript laufen, bevor du das Python File mit der DBVerbindung aufrufst, dann ist der Interpreter schon im Speicher...

Code: Alles auswählen

import time
time.sleep(10000)
Dann hast du evtl. die Ursache ...
Grüße
Matthias

- Fluchen befreit von Kummer und Leid -
Hardware
User
Beiträge: 16
Registriert: Samstag 15. April 2006, 14:18

mr.hide hat geschrieben:ich denke nicht dass das an der DB Verbindung liegt, sondern eher daran dass er beim Aufrufen eines Python Files an sich länger braucht als beim aufrufen einer py2exe. - Zumindest meine Erfahrungen.

Evtl. liegt das ja daran dass er bei py2exe nur einen abgespeckten Interpreter lädt.

Probier doch mal folgendes, lass so ein Skript laufen, bevor du das Python File mit der DBVerbindung aufrufst, dann ist der Interpreter schon im Speicher...

Code: Alles auswählen

import time
time.sleep(10000)
Dann hast du evtl. die Ursache ...
ne das Script rennt schon die ganze Zeit und andere Zugriffe auf die Datenbank sind schnell.
Nur dieser ist superlangsam.
Kann mir das nicht erklären.

Wers mal sehen will
www.proxyshare.com
Antworten