Тысячи менеджеров из офисов продаж по всей стране фиксируют в
нашей CRM-системе ежедневно десятки тысяч контактов — фактов общения с потенциальными или уже работающими с нами клиентами. А для этого клиента надо сначала найти, и желательно очень быстро. И происходит это чаще всего по названию.
Поэтому неудивительно, что, разбирая в очередной раз «тяжелые» запросы на одной из самых нагруженных баз — нашего собственного
корпоративного аккаунта СБИС, я обнаружил «в топе»
запрос для «быстрого» поиска по названию для карточек организаций.
Причем дальнейшее расследование выявило интересный пример
сначала оптимизации, а затем деградации производительности запроса при последовательной его доработке силами нескольких команд, каждая из которых действовала исключительно из лучших побуждений.
0: чего же хотел пользователь
[КДПВ отсюда]
Что вообще обычно подразумевает пользователь, когда говорит про «быстрый» поиск по названию? Почти никогда это не оказывается «честный» поиск по подстроке типа
... LIKE '%роза%'
— ведь тогда в результат попадают не только
'Розалия'
и
'Магазин Роза'
, но и
'Гроза'
и даже
'Дом Деда Мороза'
.
Пользователь же подразумевает на бытовом уровне, что вы ему обеспечите
поиск по началу слова в названии и покажете более релевантным то, что
начинается на введенное. И сделаете это
практически мгновенно — при подстрочном вводе.