@sagrus

Mysql и периоды дат — как не превысить квоту?

Добрый день!

Максимально упрощенно опишу вопрос:

Есть небольшая программка для учета загрузки производства.

Есть небольшая табличка:

1. id: INT - Primary Key
2. id_order: INT - номер заказа
3. date_start - начало производство заказа
4. date_end - конец производства заказа

То есть в таблице записи указывают с какого по какое число будет производится определенный заказ.

Однако производство имеет ограничение - не более 5 заказов в день.

перед добавление нового заказа нужно проверить каждую дату предполгаемого периода чтобы в ней уже не было 5 заказов в производстве.

Если заказов уже 5 в дате - она недоступна для размещения заказа.

Сейчас это делает очень тупо: при добавлении нового заказа с желаемым периодом производства на каждую дату идет запрос с подсчетом количества размещенных заказов: SELECT COUNT(id_order) FROM `calendar` WHERE `date_start`<='2019-09-18' and `date_end`>='2019-09-18'.

Но в ростом таблицы все это стало работать медленно просто до жути даже с учетом индексов.

Можно ли как-то построить один запрос, который сразу бы выводил максимальное кол-во заказов в день в определенный период?

Например: менеджер хочет чтобы его заказ, требующий на изготовление 3 дня изготовили с 18.09.2019 по 25.09.2019.
Как один запросом узнать, если в периоде с 18 по 25 сентября 2019 года хоть один, в котором произвоство уже загружено максимальными 5 заказами в день?

Если есть - то период недоступен для размещения заказа, если нет - то доступен.

Прошу помочь)
  • Вопрос задан
  • 51 просмотр
Пригласить эксперта
Ответы на вопрос 1
Adamos
@Adamos
У вас, видимо, накопился архив, и перебирать его в целях поиска места под будущий заказ совершенно незачем. У заказов нет отметки "выполнен", по которой их можно было бы исключить из подобных запросов?
Ну, и 5 заказов в день - это полторы тысячи в год. Совершенно незначительный объем для современной БД, особенно "с учетом индексов". Что-то не так.
Ответ написан
Ваш ответ на вопрос

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

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