Я хочу использовать индекс для ускорения левого объединения двух представлений 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.