@6b9ff689d67

Как ускорить поиск для LIKE?

У меня есть база sqlite на 22млн строк, в ней много разных полей, по типу name, phone и т.д.
На параметр phone у меня стоит индекс: DESC и BINARY

Когда я делаю прямой запрос по телефону:
SELECT * FROM data WHERE phone == "79123456789"
То поиск занимает не больше одной секунды.

Но если мне нужно сделать поиск через LIKE, то время поиска вырастает до 20-30 секунд.
SELECT * FROM data WHERE phone LIKE "7912345678%"
Можно ли как-нибудь ускорить поиск через LIKE?
  • Вопрос задан
  • 127 просмотров
Пригласить эксперта
Ответы на вопрос 1
@6b9ff689d67

вот решение как создать индекс помогающий LIKE

CREATE TABLE contacts (
	first_name text NOT NULL,
	last_name text NOT NULL,
	email text NOT NULL
);


CREATE UNIQUE INDEX idx_contacts_email
ON contacts (email COLLATE NOCASE) ;

EXPLAIN QUERY PLAN 
SELECT
	first_name,
	last_name,
	email
FROM
	contacts
WHERE
	email LIKE 'lisa.smith@sqlitetutorial.ne%';


получаем:

SEARCH TABLE contacts USING INDEX idx_contacts_email (email>? AND email<?)


должно быть быстрее чем TABLE SCAN
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы