Использует ли SQLite индексы, которые я создаю при объединении двух представлений? - PullRequest
0 голосов
/ 18 апреля 2019

Я хочу использовать индекс для ускорения левого объединения двух представлений SQLite. Однако, похоже, он не использует индекс.

У меня есть пространственная таблица SpatiaLite, которая называется RoadsPolyline. Я добавляю индекс с

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.

...