ここsqlfiddle of my exampleだが、私が説明しましょう:私はWHERE句でリテラルカラムの値を使用するときにSQLiteがインデックスを使用しないのはなぜですか?
CREATE INDEX test_idx ON ForgeRock(productName);
:
私はこのような単純なテーブルを持っている場合:
CREATE TABLE ForgeRock
(`id` int, `productName` varchar(7), `description` varchar(55))
;
そして、このようなproductName
列に単純なインデックスWHERE句でproductName
を使用してデータを簡単に選択でき、インデックスが使用されています。ニース。
:
SELECT
0 as foo,
0 as bar,
productName,
description
FROM
ForgeRock
WHERE (foo = 0 AND productName IN ('OpenIDM', 'OpenDJ'))
でもハードコーディングされたfoo
列でを使用してWHERE節は引き続き索引を使用します(必要な場合)。しかし、ここに私の質問です:WHERE句にOR (foo = 1 AND bar IN (1))
を追加すると、インデックスが使用されないのはなぜですか?
SELECT
0 as foo,
0 as bar,
productName,
description
FROM
ForgeRock
WHERE (foo = 0 AND productName IN ('OpenIDM', 'OpenDJ')) OR (foo = 1 AND bar IN (1));
助けてください。再び、here's the sqlfiddle。