もっと速いでしょう。主キー特定の文字列Pythonで特定の行のSQLite3テーブルを検索するか、Pythonを使用する方が速いですか?
OR
に等しい行のsqlite3のデータベーステーブルを検索し、私は(クエリを使用)sqlite3のデータベーステーブルからのすべての主キーを取得するPythonのリストとして、およびキーワードにPythons を使用して、特定の文字列がそのリスト内に存在するかどうかをテストします。
SQLite3は、私が検索しているプライマリキーを持つ特定の行を見つけるために、より高度なアルゴリズムを採用していますか?一度私は自分のバイナリ検索を取得します)いずれかの方法を実行する
コード:
import sqlite3
conn = sqlite3.connect("d.db")
cur = conn.cursor()
isPresent = cur.execute("SELECT target FROM stringList WHERE target='specificString';").fetchall()
return isPresent == None
// Alternate
primaryKeyList = cur.execute("SELECT target FROM stringList;").fetchall()
return 'specificString' in primaryKeyList
// Or I can sort the list then use a binary search or other fast algorithm
primaryKeyList = cur.execute("SELECT target FROM stringList;").fetchall()
//..sort primaryKeyList
primaryKeyList = sortList(primaryKeyList)
return binarySearch('specificString') == True
PS:私は行が中に格納したいどのような順序でSQLite3のを伝える方法はありますか?だから私はいつもテーブルの行をアルファベット順に並べ替えることができます(プライマリキーに従って)。
ええと、SQLiteのテーブルスキャンがその集中型であるかどうかわかりません。1.自分自身にとっては、3つのテーブルしかないので、あまり集中的ではありません。 2.ヘッダーにテーブルXの位置を保存してから、ファイル/データベースを開き、fseek()(C++)を使用してその位置に移動します。私はSQLiteがファイルをどのようにフォーマットするのかわかりませんが、テーブルの参照にはこのメソッドが必要です。あなたは、テーブルスキャンが実際にそのメモリ集中型であると確信していますか? –
@ JakeM:SQLiteのスキャンに時間がかかりすぎたり、メモリを大量に消費するとは言いませんでした。そうではありません。索引から* 1つの行*を検索するよりも高価になります。再:SQLiteファイルの 'fseek'ing:しないでください。本当に、しないでください。 SQLiteの人々は、あなたのためにマイクロ最適化を行う仕事に怒っています。そして、あなたがそれを必要としていることを知る前に、そのようなことをすることは決して考えてはいけません。 – Borealid
ボレアリドを聞く。行検索のためのインデックスを使用するだけです。 – rabra