1

私はデータベースに不慣れで、 を使用して最初のコードを書きsqlite3ました。それは仕事をしますが、実行が非常に遅いので、速度を上げる方法についてアドバイスを得たいと思っています。

現在、私のコードは次のようになっています。

For Line in File:
   Line= Line.strip('\n').split('\n')
   Location = int(Line[1])
   MChr = Line[0]
cur = db.execute('''SELECT Start, End, Chr, Feature1, Feature2, Feature3, Feature4, FROM DataBase
                    WHERE Start <= ? AND End >= ? AND Chr == ?''', (Location, Location, MChr))
for (Start, Stop, Chr, Feature1, Feature2, Feature3, Feature4) in cur:
    if Feature1 == "A string":
        do something....
    if Feature2 == "A string":
        do something....

私のデータベースには 100 万を少し超えるエントリがあり、それがおそらく私のプログラムの実行速度が遅い理由ですが、行ごとに 100 万をすべて実行しなければならないことを回避するために、検索をより効率的にする方法があるかどうか疑問に思っていました。(おそらく最初に、一致するすべての Chrs を引き出しますか?)

4

2 に答える 2

2

データベースにインデックスを付ける必要があります。

http://www.sqlite.org/lang_createindex.html

これは物事をスピードアップするはずです。

于 2013-05-20T15:30:30.360 に答える
1

問題の列にインデックスを作成します。テーブル名がDataBaseの場合は、次のようなものを試してください。

db.execute('''CREATE UNIQUE INDEX Start_index ON `DataBase` (`Start`(64))''')
db.execute('''CREATE UNIQUE INDEX End_index ON `DataBase` (`End`(64))''')
db.execute('''CREATE UNIQUE INDEX Chr_index ON `DataBase` (`Chr`(64))''')
于 2013-05-20T15:55:38.410 に答える