powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вопрос по оптимизации запроса к БД.
5 сообщений из 5, страница 1 из 1
Вопрос по оптимизации запроса к БД.
    #40055896
Михаил Кри
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток!
Испоользую в web-проекте связку vue-laravel-mysql. На стороне БД MySql есть довольно тяжелый запрос с подзапросом, отдающий json. Сам по себе Json не большой. Но на стороне сервера MySql выполняется запрос , перебирающий около 150 раз таблицу с кучей полей, в которой около 35 000 строк. Сам запрос выглядит так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select `id`, `name` from `poi`
where exists
  (select id
    from `events`
    where json_contains(`events`.`metros`, json_array(`poi`.`id`))
      and `start_day` BETWEEN '2021-03-01 00:00:00' and '2021-03-31 00:00:00'
      and `events`.`deleted_at` is null)
  and `poi`.`deleted_at` is null

. В поле metros лежит json-массив, в котором в подзапросе ищем совпадения. Результат вывода Explain такой см. приложенный скрин.

Такой запрос отрабатывает по 15-20 секунд, что для сайта просто невыносимо. Что тут можно оптимизировать? Возможно стоит посмотреть настройки самого сервере MySql? На какие параметры стоит обратить внимаение в настройках сервера?
...
Рейтинг: 0 / 0
Вопрос по оптимизации запроса к БД.
    #40055940
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Кри,

Сколько записей в таблице events подпадает под условие `start_day` BETWEEN '2021-03-01 00:00:00' and '2021-03-31 00:00:00' and `events`.`deleted_at` is null ?
Зачем в этом выражении время?

В целом малокровных вариантов оптимизации я не вижу.
Немалокровные варианты:
1) Изменить структуру хранения. Избавиться от json в пользу обычных полей или дублировать значения из json в обычных полях.
2) Добавить кэширующие таблицы и пересчитывать их, например, раз в сутки во время наименьшей загрузки.
...
Рейтинг: 0 / 0
Вопрос по оптимизации запроса к БД.
    #40056005
Fitter2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лара чуть не из коробки работает с Рэдисом это решит вашу проблему за час.
А так, почему вы так храните данные вам виднее. подумайте, может это можно хранить в таблицах с полями и оптимизировать их когда нужно. 35к - это маленькая таблица , что будет с 1000к строк.


miksoft>
Думаю, что он спешил и не поставил 23:59:59.
...
Рейтинг: 0 / 0
Вопрос по оптимизации запроса к БД.
    #40056027
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
`events`.`metros` - это массив? тип данных числовой? постройте Multi-Valued Index.

И `poi`.`id` в JSON-массив преобразовывать вовсе необязательно...
...
Рейтинг: 0 / 0
Вопрос по оптимизации запроса к БД.
    #40056369
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
переписать на inner join
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вопрос по оптимизации запроса к БД.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]