Próbowałem przetworzyć to samo żądanie do tej samej bazy danych za pomocą "Python 2.7.4 + sqlite3" i "Firefox SQLite Manager 0.8.0".Dlaczego Python + sqlite3 jest bardzo wolny?
W niewielkiej bazie danych (8000 rekordów) zarówno Python, jak i Firefox działają szybko i dają taki sam wynik.
na większej bazy danych (2600000 zapisy): Menedżer przetwarzane w bazie
- SQLite w 28seconds (24 rekordów)
- Program Python działa już na 20 minut bez rezultatu
Co może być nie tak z następującym programem, więc python sqlite3 nie może przetworzyć zapytania w rozsądnym czasie, podczas gdy to samo żądanie może być przetworzone szybciej?
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 zwraca również te same 24 rekordy
Update2: sqlite3.sqlite_version jest '3.6.21'
Czy jesteś pewien, że SQLite Manager przetwarza ** ** wszystkie wiersze wyniku? Twój program w języku Python to ... –
Tak, "Wiersz poleceń dla SQLite" daje te same 24 rekordy. –
Może plik bazy danych jest zablokowany przez SQLite Manager? – warvariuc