2017-01-20 11 views
1

プライマリキーを知っているときに、レコードが存在するかどうかを確認する最速の方法は何ですか? select,count,filter,whereなどですか?レコードが存在するかどうかを確認する最速の方法

+0

' COUNT(ID)と主キーの索引付け。 – TemporalWolf

+0

最速の方法は、指定されたオプションの中でcountを使用することです。より多くのrawを使用するには、sqlite3_column_count()をsqliteソースから直接使用して、ユーザー定義のハッシュリストを維持します。 – Jerry

答えて

1

EXPLAIN QUERY PLANで確認できます。具体的なクエリに対しては、&の費用が表示されます。

コストは実行間では直接比較されませんが、大きな違いがあるかどうかはまあまあです。

と言われていますが、おそらくCOUNT(id) FROM table WHERE table.id="KEY"が部分検索能力(特にアマゾンの赤方偏移のようなcolumnar databasesで速い)と主キー索引付けを利用するので、理想的です。

1

countを使用すると、2番目のレコードが存在する可能性があるため、レコードが見つかった場合でもデータベースは検索を続行する必要があります。 したがって、実際のレコードを検索し、最初のレコードの後で停止するようにデータベースに指示する必要があります。

レコードからデータを返すように要求すると、データベースはそのデータをテーブルから読み取る必要があります。しかし、インデックス内のIDを参照してレコードを見つけることができれば、そのテーブルへのアクセスは不必要になります。 Soは、あなたが検索に使用したIDだけを返すべきではありません:あなたが使用しているとき

とにかく
SELECT id FROM MyTable WHERE id = ? LIMIT 1; 

、実際のデータとリミットを読んでいない暗示されてピーウィーが簡単である、EXISTS:

それは(Amazonの赤方偏移のような柱状のデータベースで特に高速な)部分的なルックアップ機能を利用しますようtable.id =「KEY」は、 `、おそらく理想的であるテーブルFROM
SELECT EXISTS (SELECT * FROM MyTable WHERE id = ?); 
MyTable.select().where(MyTable.id == x).exists() 
関連する問題