连接两个视图时,SQLite是否使用我创建的索引?

时间:2019-04-18 07:25:37

标签: sqlite spatialite

我想使用索引来加快两个SQLite视图的左联接。但是,它似乎没有使用索引。

我有一个称为RoadsPolyline的SpatiaLite空间表。我用

添加索引
create index idx_RoadNames on
RoadsPolyline(RoadName)

然后我创建一个非常简单的视图

CREATE VIEW test as
select *
from RoadsPolyline

当我查询

explain query plan
select *
from test as t1
left join test as t2 on t1.RoadName = t2.RoadName

我得到了(仅详细列):

SCAN TABLE RoadsPolyline
SCAN TABLE RoadsPolyline
SEARCH SUBQUERY 1 AS t2 USING AUTOMATIC COVERING INDEX (RoadName=?)

最有趣的是,当我在联接之前删除“ left”并使其成为内部联接时,我得到:

SCAN TABLE RoadsPolyline
SEARCH TABLE RoadsPolyline USING INDEX idx_RoadNames (RoadName=?)

因此它将索引用于内部联接,但不用于左联接。但是,对于更复杂的查询,我需要使用左联接。

我正在使用SpatiaLite 4.3.0a,SQLite版本3.8.11.1。

0 个答案:

没有答案