Ich habe versucht, die gleiche Anfrage an die gleiche Datenbank mit "Python 2.7.4 + sqlite3" und "Firefox SQLite Manager 0.8.0" zu verarbeiten.Warum Python + sqlite3 ist extrem langsam?
In der kleinen Datenbank (8000 Datensätze) arbeiten Python und Firefox schnell und liefern das gleiche Ergebnis.
Auf der größeren Datenbank (2.600.000 Datensätze):
- SQLite-Manager verarbeitet Datenbank in 28 Sekunden (24 Einträge)
- Python-Programm bereits ohne Erfolg für 20 Minuten arbeitet
Was kann mit dem folgenden Programm falsch sein, so Python sqlite3 kann die Abfrage in angemessener Zeit nicht verarbeiten, während die gleiche Anfrage schneller verarbeitet werden kann?
import sqlite3
_sql1 = """SELECT DISTINCT J2.rule_description,
J2.feature_type,
J2.action_item_id,
J2.rule_items
FROM journal J1,
journal J2
WHERE J1.base = J2.base
AND J1.action_item_id=J2.action_item_id
AND J1.type="Action disabled"
AND J2.type="Action applied"
AND J1.rule_description="Some test rule"
AND J1.action_item_id IN (1, 2, 3, 14, 15, 16, 17, 18, 19, 30, 31, 32)
"""
if __name__ == '__main__':
sqlite_output = r'D:\results.sqlite'
with sqlite3.connect(sqlite_output) as connection:
for row in connection.execute(_sql1):
print row
UPDATE:Command Line Shell For SQLite liefert auch die gleichen 24 Datensätze
UPDATE2: sqlite3.sqlite_version ist '3.6.21'
Sind Sie sicher, dass SQLite-Manager verarbeitet ** alle ** Ergebniszeilen? Ihr Python-Programm ist ... –
Ja, "Befehlszeilen Shell für SQLite" gibt auch die gleichen 24 Datensätze –
Vielleicht ist die Datenbankdatei von SQLite Manager gesperrt? – warvariuc