[英]Why won't SQLite use my index for order by
My Query: 我的查询:
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
My Indices: 我的指数:
CREATE INDEX i1 on t1(ZID);
CREATE INDEX i2 on t2(ZCHARACTERID, Z_ENT, ZSTROKECOUNT);
Explain Query Plan 说明查询计划
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
From line 3 of the explain query plan, it says only two indexed columns are used and temp b-tree is used for order by. 从说明查询计划的第3行开始,它说仅使用两个索引列,并且使用temp b树进行排序。 But from what I understand, I should be able to use i2 for order by as well. 但是据我了解,我也应该能够使用i2进行订购。
Did I miss anything? 我有想念吗? Thanks. 谢谢。
because you forgot FROM
clause 因为您忘记了FROM
子句
try this way 尝试这种方式
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
The index is not ordered by ZSTROKECOUNT
. 索引不是按ZSTROKECOUNT
排序的。
SQLite will use the index for sorting if you do this: 如果执行此操作,SQLite将使用索引进行排序:
DROP INDEX i2;
CREATE INDEX i3 ON t2(ZSTROKECOUNT, ZCHARACTERID, Z_ENT);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.