我的查询:
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
从解释查询计划的第 3 行开始,它表示仅使用两个索引列,并且使用临时 B 树作为排序依据。但据我了解,我也应该能够使用 i2 进行排序。
我错过了什么吗?谢谢。
最佳答案
因为你忘记了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
关于sql - 为什么 SQLite 不使用我的索引进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15184690/