sql - 为什么 SQLite 不使用我的索引进行排序

标签 sql sqlite indexing

我的查询:

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/

相关文章:

来自 AppFabric 提供程序的 Sqlite 连接

logging - 为什么空值出现在 solr.log 的第一行内

java - Hibernate集合设置列作为索引

mysql - 如何导入两个包都注册驱动程序mysql

SQL插入错误

c# - 具有包含 7 亿条记录的表的数据库

android - Cordova SQLite UTF8 在插入时抛出错误

python - 按索引访问数组

mysql - 优化 "Count less than"查询

mysql - 如何在mysql中使用INNER JOIN从两个表中删除行?