@entermix

Почему долго выполняется sql запрос?

База данных: https://github.com/x88/i18nGeoNamesDB (1,3 ГБ; 2,551,294 строк)

На выделенном сервере (Core i5 3.8ГГц (4 ядра) / 8Гб RAM / 2x500Гб SATA), LIKE запрос на поиск города по названию выполняется почти 3.7 сек, это нормально для такой БД? Как ускорить? Поможет ли индексация? Нужно сделать подсказку при вводе города пользователем, будет ли PostgreSQL работать быстрее для этих целей?
  • Вопрос задан
  • 2493 просмотра
Решения вопроса 1
rpsv
@rpsv
делай либо хорошо, либо никак
Полнотекстовый поиск наверное лучше (не точно).
---
Индекы помогут несомненно, но я думаю они уже заданы, без них было бы дольше 4 секунд. Какие вообще индексы заданы в таблицах?
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@deliro
Агрессивное программирование
1. Если выполняется LIKE с двумя wildcard'ами по бокам (LIKE '%something%') - обычные индексы не работают. Если с wildcard'ой на конце - работают.
2. Не знаю, что там у MySQL, у PostgreSQL есть pg_trgm расширение как раз для такого поиска (LIKE с wildcard'ами) + индекс gin/gist. Вот только сегодня отвечал. У нас сейчас стоит такой индекс, в таблице чуть больше 10млн записей. Работает достаточно быстро.
3. Конфиг дефолтный сразу в топку. Нужно, чтобы БД более агрессивно использовала ОЗУ.
Ответ написан
@Miron11
Пишу sql 20 лет. Срок :)
Если Вам нужен очень быстрый ответ, разбиваете имена городов на буквы, создаёте XML индекс, и выбираете имена городов во временную таблицу после чего заканчиваете запрос по ключу города. В Постгрес столько расширений что я почти уверен, вы найдете все ответы за несколько запросов в Яндексе.
Ответ написан
Ваш ответ на вопрос

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

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