Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SELECT не использует индекс / 2 сообщений из 2, страница 1 из 1
31.05.2017, 12:27
    #39462998
Lexerys
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT не использует индекс
Здравствуйте!

Есть пара таблиц:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE IF NOT EXISTS STUDY (
	ID integer primary key autoincrement
);

CREATE TABLE IF NOT EXISTS SERIE (
	ID integer primary key autoincrement,
	STUDY_ID int,
	FOREIGN KEY(STUDY_ID) REFERENCES STUDY(ID));
CREATE INDEX IF NOT EXISTS STUDYID_INDEX ON SERIE (STUDY_ID);



Такой запрос выполняется быстро:
Код: sql
1.
SELECT SE.STUDY_ID, COUNT(SE.ID) FROM SERIE SE GROUP BY SE.STUDY_ID order by SE.STUDY_ID ASC limit 1000



Если изменить направление сортировки, то запрос потребует "USE TEMP B-TREE FOR ORDER BY", и выполняться будет в тысячи раз медленнее:
Код: sql
1.
SELECT SE.STUDY_ID, COUNT(SE.ID) FROM SERIE SE GROUP BY SE.STUDY_ID order by SE.STUDY_ID DESC limit 1000



Нашел вот это:
http://sqlite.1065341.n5.nabble.com/ORDER-BY-DESC-after-GROUP-BY-not-using-INDEX-intentionally-td71792.html

Почему так, и как быть?
Спасибо!
...
Рейтинг: 0 / 0
31.05.2017, 17:50
    #39463282
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT не использует индекс
LexerysПочему так, и как быть?ПАТАМУЧТА!
Ты же уже нашел ответ авторов SQLite... Первый же ответ в треде на который ты дал ссылку.

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


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