1

私のクエリ:

SELECT *
FROM t1, t2
WHERE (t1.ZID=t2.ZCHARACTERID AND t1.ZID IN (1,2,3,4) AND t2.Z_ENT=3)
ORDER BY t2.ZSTROKECOUNT

私の指標:

CREATE INDEX i1 on t1(ZID);
CREATE INDEX i2 on t2(ZCHARACTERID, Z_ENT, ZSTROKECOUNT);

クエリ プランの説明

selectid    order       from        detail                                                                         
----------  ----------  ----------  -----------------------------------------------------------------  --------------
0           0           1           SEARCH TABLE t1 USING INDEX i1 (ZID=?) (~740 rows)
0           0           0           EXECUTE LIST SUBQUERY 1                                                        
0           1           0           SEARCH TABLE t2 USING INDEX i2 (ZCHARACTERID=? AND Z_ENT=?) (~9 row)
0           0           0           USE TEMP B-TREE FOR ORDER BY    

Explain クエリ プランの 3 行目から、2 つのインデックス付き列のみが使用され、一時 B ツリーが順序付けに使用されることが示されています。しかし、私が理解していることから、オーダーバイにも i2 を使用できるはずです。

何か見逃しましたか?ありがとう。

4

2 に答える 2

1

FROM節を忘れたから

この方法を試してください

   SELECT * FROM your_table WHERE (t1.ZID=t2.ZCHARACTERID AND t1.ZID IN (1,2,3,4) AND t2.Z_ENT=3) ORDER BY t2.ZSTROKECOUNT
于 2013-03-03T12:22:01.900 に答える
0

インデックスは 順ではありませんZSTROKECOUNT

これを行うと、SQLite はソートにインデックスを使用します。

DROP INDEX i2;
CREATE INDEX i3 ON t2(ZSTROKECOUNT, ZCHARACTERID, Z_ENT);
于 2013-03-03T16:04:24.583 に答える