Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / EXPLAIN QUERY PLAN: не срабатывает индекс / 2 сообщений из 2, страница 1 из 1
16.06.2018, 22:56
    #39661617
potkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXPLAIN QUERY PLAN: не срабатывает индекс
Таблица (древовидной структуры):
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE [MyTable] (
  [MyTableID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
  [Sub] INTEGER CONSTRAINT [FK_MyTable_Sub] REFERENCES [MyTable]([MyTableID]) ON DELETE RESTRICT ON UPDATE RESTRICT MATCH FULL DEFERRABLE INITIALLY DEFERRED, 
  [MyTableName] TEXT(256) NOT NULL
)

CREATE INDEX [IDX_MyTable_Sub] ON [MyTable] ([Sub]);



1. Есть запрос:
Код: sql
1.
2.
3.
4.
EXPLAIN QUERY PLAN
SELECT *
FROM  [MyTable] AS [T1], [MyTable] AS [T2]
WHERE [T1].[MyTableID]=[T2].[Sub]


Результат:
Код: sql
1.
2.
SCAN TABLE Table AS T2
SEARCH TABLE DirServiceNomens AS T1 USING INTEGER PRIMARY KEY (rowid=?)


Меня смущает вот это:
SCAN TABLE MyTable AS T2

2. При том что запрос:
Код: sql
1.
2.
3.
4.
EXPLAIN QUERY PLAN
SELECT * 
FROM MyTable
WHERE Sub=50


Даёт такой результат:
Код: sql
1.
SEARCH TABLE MyTable USING INDEX IDX_MyTable_Sub (Sub=?)



Вопрос:
Можно как-то решить использование индекса IDX_MyTable_Sub для первого запроса?
...
Рейтинг: 0 / 0
17.06.2018, 04:30
    #39661632
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXPLAIN QUERY PLAN: не срабатывает индекс
Можно. Но не нужно.

Можно. Читать тут как работает оптимизатор и там же есть подсказки по ручному упарвлению: https://sqlite.org/optoverview.html

Не нужно.
Потому что у тебя идет связь сам-с-собой. При этом, T2 - ничем не лимитирована, а T1 лимитирована по T2. Таким образом и получается что по T2 надо делать полный скан, а по T1 только те записи что отмечены в T2. То есть оптимизатор тебе уже нашел идеальный план для твоей ситуации.
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / EXPLAIN QUERY PLAN: не срабатывает индекс / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]