私は大規模なDBのテーブルを持っている(> 300'000記録)と私はせずに、1つのパラメータに応じてフィールドを照会するには、加入:FirebirdのSQLクエリの最適化
SELECT F1, F2, ..., IS_NOT_TO_LOAD FROM MY_TABLE WHERE IS_NOT_TO_LOAD IS DISTINCT FROM 1;
私はテーブルの上にインデックスを作成しましたwrt IS_NOT_TO_LOAD
フィールド:
CREATE ASC INDEX "IND_MY_TABLE_IS_NOT_TO_LOAD" ON "MY_TABLE" ("IS_NOT_TO_LOAD");
私は実行計画に精通していないが、私は、クエリが自然な実行計画ではなく、インデックス・プランを使用することを期待したいです。
私はここで何か間違っているのですか、または私のクエリを最適化するためのよりよいアプローチがありますか?
SELECT F1, F2, ..., IS_NOT_TO_LOAD FROM MY_TABLE WHERE IS_NOT_TO_LOAD < 1;
計画PLAN (A INDEX (IND_MY_TABLE_IS_NOT_TO_LOAD))
を使用していますが、私は時々、時々0またはNULL値、0
IS_NOT_TO_LOADはnullかIS_NOT_TO_LOAD <> 1'は何を与えますか?これは選択性の低い列のように聞こえるので、Firebirdが索引を使用しないことが望ましい理由になる可能性があります。 –
@MarkRotteveelそれは同じです - それは自然な計画を使用しています... – neggenbe