Индекс выбирают под запросы: B-tree для равенства и сортировки, подходящий индекс для префикса, trigram для подстроки или нечёткого поиска. Для небольшой таблицы последовательное чтение может быть быстрее.
Как бы вы разработали систему индексирования в PostgreSQL для таблицы с городами России, чтобы поиск по городам был оптимален?
Индекс выбирают под запросы: B-tree для равенства и сортировки, подходящий индекс для префикса, trigram для подстроки или нечёткого поиска. Для небольшой таблицы последовательное чтение может быть быстрее.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Индекс выбирают под запросы: B-tree для равенства и сортировки, подходящий индекс для префикса, trigram для подстроки или нечёткого поиска. Для небольшой таблицы последовательное чтение может быть быстрее.
Сначала определите требования: точное имя, поиск без регистра, автодополнение, регион и одинаковые названия городов. Если запрос использует lower(name), индекс должен соответствовать выражению; для префикса учитывают collation и operator class. Координатный поиск требует пространственной модели, а не индекса текста. Проверяйте планы на реальных запросах и данных. Не создавайте все виды индексов сразу: они занимают место и удорожают обновления.