1


0

私はメモリデータベースにDBD

SQLiteを使っています。 テーブルに次のインデックスを定義しました。

CREATE INDEX x ON ss(a、b); ss(c、d、e、o)にインデックスを作成します。

次のselect文はこれら2つのインデックスを使用しますか?

SELECT f、g ssからWHERE a =? AND b =? AND c =? AND d =? AND e =?

そして、where句でそれらのカラムにインデックスを作成するだけですか?

'' '' '

これは、最小限のINDEXでもっとSELECTを実行したいからです。

SELECT f、g ssからWHERE o =? SELECT f、g ssからWHERE a =? AND b =? SELECT f、g ssからどこへc =? AND d =? AND e =? SELECT f、g ssからどこへc =? AND d =? AND o =? SELECT f、g ssからWHERE a =? AND b =? AND c =? AND d =? AND e =?

3 Answer


2


使用されているインデックスを確認するには、 EXPLAIN QUERY PLAN(http://sqlite.org/lang_explain.html)を使用してください。

クエリプランの選択f、g ssからどこa =? AND b =? AND c =? AND d =? AND e =?

のようなものに再利用

"0"、 "0"、 "インデックス付きのテーブルss ..."


0


間違っているかもしれませんがsqliteの小さなフットプリントを考えればそれが今までのところ(sub)Selectの各テーブルのために1つ以上のインデックスを使用すれば私は非常に驚きます。

ORACLEやDB2などのモンスターデータベースは、最近、副選択ごとにテーブルごとに複数の索引を使用するようになり、その後まれにしか使用されなくなりました。


0


私がSQLiteのドキュメントを覚えている限り、SQLiteは常に_only_ * one *インデックスを使います。

だからあなたはここで失敗することになっています。 しかし、関連するすべてのフィールドを含む1つのインデックスを作成することもできます(ただし、これによりインデックスサイズのためのメモリ消費量が増え、挿入と更新が遅くなります)。

訂正:最新の文書では、オプティマイザは「少なくとも1つのインデックス」を使用しようとしていると述べています。 それは少しアップグレードされたことを継ぎ合わせていますが、それでも複数のインデックスを使用しているかどうかは明らかではありません。 だからあなたはwierobの文言として "EXPLAIN QUERY PLAN"を使わなければならない。