База данных Sqlite не использует существующий индекс - PullRequest
0 голосов
/ 11 ноября 2018

Я создал индексы по 3 столбцам, но поиск все еще очень медленный.Похоже, что индекс вообще не используется.

sqlite> .schema
CREATE TABLE users(username, address, date_signup);
CREATE INDEX usersindex on users (username, address, date_signup);
sqlite> explain query plan select * from users where username = 'johndoe';
0|0|0|SCAN TABLE users
sqlite> 

Как это исправить?

Редактировать: я использую sqlite-версию SQLite version 3.11.0 2016-02-15 17:29:24

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Я не могу повторить.

$ sqlite3
SQLite version 3.25.3 2018-11-05 20:37:38
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> CREATE TABLE users(username, address, date_signup);
sqlite> CREATE INDEX usersindex on users (username, address, date_signup);
sqlite> explain query plan select * from users where username = 'johndoe';
QUERY PLAN
`--SEARCH TABLE users USING COVERING INDEX usersindex (username=?)
sqlite> 

Как видите, он использует индекс, как и ожидалось. Из вашего формата EXPLAIN QUERY PLAN вы используете более старую версию ... сколько вам лет? Возможны изменения и исправления в планировщике запросов, которые могли повлиять на результаты. Вы можете просмотреть журнал изменений , чтобы увидеть.

(Самая старая версия установленной мной оболочки sqlite3 - 3.22, и в ней также используется индекс.)

0 голосов
/ 11 ноября 2018

Это утверждение:

select * from users where username = 'johndoe'

наверняка будет работать быстрее, если существует индекс для столбца username, но не существует .

Индекс, который вы создали:

CREATE INDEX usersindex on users (username, address, date_signup) 

является не индексом для username, но для всех 3 столбцов username, address, date_signup.
Конечно, я не знаю, было ли это твоим намерением.
Если вы запустите операторы SELECT, включающие предложения WHERE или JOIN, ссылающиеся на эти 3 столбца вместе, вы увидите улучшение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...