簡體   English   中英

SQLite為什么不使用我的索引進行排序

[英]Why won't SQLite use my index for order by

我的查詢:

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行開始,它說僅使用兩個索引列,並且使用temp 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

索引不是按ZSTROKECOUNT排序的。

如果執行此操作,SQLite將使用索引進行排序:

DROP INDEX i2;
CREATE INDEX i3 ON t2(ZSTROKECOUNT, ZCHARACTERID, Z_ENT);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM