2013-07-02 4 views
7

"파이썬 2.7.4 + sqlite3"과 "파이어 폭스 SQLite 관리자 0.8.0"을 사용하여 같은 데이터베이스에 동일한 요청을 처리하려고했습니다.python + sqlite3이 너무 느린 이유는 무엇입니까?

파이썬과 파이어 폭스 모두 작은 데이터베이스 (8000 개 레코드)에서 빠르게 작동하며 동일한 결과를 제공합니다.

더 큰 데이터베이스에

(2600000 개 기록) : 28초에

  • SQLite는 관리자 처리 데이터베이스 (24 개 기록)
  • 파이썬 프로그램이 어떤 결과없이 20 분 동안 이미 작동하고

무엇 다음 프로그램에 잘못 될 수 있으므로 python sqlite3은 합리적인 시간에 쿼리를 처리 할 수없고 동일한 요청을 더 빠르게 처리 할 수 ​​있습니까?

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 : 문제가 이전과 관련되어, sqlite3.sqlite_version은 '3.6.21'

+4

당신은 SQLite는 관리자 ** 모든 ** 결과 행을 처리하는 확신이 있습니까? 귀하의 파이썬 프로그램은 ... –

+0

예, "SQLite의 명령 행 쉘"도 동일한 24 개의 레코드를 제공합니다 –

+0

아마 SQLite Manager가 데이터베이스 파일을 잠그고 있습니까? – warvariuc

답변

5

것 같다 :Command Line Shell For SQLite도 같은 24 개 기록

UPDATE2을 반환 Python 2.7과 함께 제공되는 sqlite 버전. 모든 것은 파이썬 3.3에서 잘 작동합니다.

@CL에 감사드립니다. 파이썬에서

파이썬에서 2.7

>>> import sqlite3 
>>> sqlite3.sqlite_version 
'3.6.21' 

3.3

>>> import sqlite3 
>>> sqlite3.sqlite_version 
'3.7.12' 
+2

입니다. 필요한 경우 sqlite를 업그레이드하여 Python 2.7을 계속 사용할 수 있습니다. – EOL

+0

@EOL 또 다른 (아마도 더 나은) 해결책은 색인을 만드는 것입니다. 나는 단지 성능의 차이에 대해 궁금했습니다. –

+0

그래, 인덱스는 큰 속도를 낼 수 있습니다. 나는 호기심도 많았다. 그래서 +1과 질문에 대답했다. :) – EOL

관련 문제