@12bc88f2c15a324518

Почему запрос по имени работает медленнее если заменить фамилию на %?

Я совершаю запрос LIKE в базу данных SQLITE, на поле имени у меня стоит индекс COLLATE NOCASE, когда я делаю запрос по фио, то поиск занимает миллисекунды. Но если я хочу сделать запрос где фамилия будет заменена символом % (% Александр Сергеевич), то время поиска возрастает до 25 секунд минимум..

Данная проблема только если заменить первое слово в запросе (в моём случае фамилия).
Что можно с этим сделать?
  • Вопрос задан
  • 52 просмотра
Пригласить эксперта
Ответы на вопрос 1
trapwalker
@trapwalker
Программист, энтузиаст
Так устроен индекс. Он строится в первую очередь по первым символам и в последнюю по последним.
Если вы подменяете % начало, то индекс просто не будет работать.
Разделите ФИО на отдельные компоненты и сделайте отдельный индекс для имени, тогжа ваш кейс будет быстрее работать.
У вас же фактически происходит полный перебор базы без индекса.

Для примера. Вот у вас есть больой алфавитный список людей. Найти в нем любого человека по тому, по чему список отсортирован - это тривиальная задача. Вы делите весь спислк пополам и мгновенно определяете в какой половине искомая строка. Потом делите оставшуюс половину и так далее. А теперь представьте, что ваш список осортирован по фамилии, а вам надо найти в нем Сигизмунда. Всех Сигизмундов. Сортировка по фамилии вам не поможет быстро искать. Нужна сортировка по имени. Для этого и делают отдельные индексы.
Ответ написан
Ваш ответ на вопрос

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

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