@wolf-9830

Какие есть идеи для выполнения очень большого запроса?

Есть запрос базу данных, берется 40 полей, из разных таблиц ( 9 join-ов) в запросе используется один коротенький подзапрос и оконные функции lead, в основной таблице, по которой работает запрос 5 млн. записей, пытался создать представление, но при обращении к нему 504 error, такая же ситуации и с созданием функции, где используется курсор, может есть какие нибудь способы выполнить очень большой и трудоемкий запрос укладываясь в таймаут по умолчанию (30 секунд)?

P.S. Сам запрос скинуть не могу, начальство не разрешает
  • Вопрос задан
  • 424 просмотра
Пригласить эксперта
Ответы на вопрос 4
qonand
@qonand
Software Engineer
нужно смотреть и анализировать сам запрос ... в общем случае смотрите в сторону партицирования и индексов
Ответ написан
Комментировать
sim3x
@sim3x
Смотри EXPLAIN
Используй временные таблицы
Присмотрись к начальству, а точнее к их адекватности
Запрос вставь в текстовик и сделай замену полей на поле_1, поле_х, аналогично с названиями таблиц
Ответ написан
Комментировать
@res2001
Developer, ex-admin
1.Сделать необходимые индексы.
2.Разбить большой запрос на несколько маленьких. Даже если по коду будет казаться больше, но обычно несколько маленьких запросов выполняются быстрее, чем один большой. Запросы объединяйте с помощью временных таблиц или union.

PS: Вообще то что вы описали, не есть что-то страшное. Подобные запросы встречаются сплошь и рядом в разнообразных корпоративных системах. Начните с индексов, возможно до второго пункта и не доберетесь.
Ответ написан
Комментировать
Насколько часто меняются данные?
Имеет смысл выполнять запрос в фоновом режиме (например по расписанию) и складывать результаты во временную таблицу, а уже из нее выдавать данные дальше.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы