Начальные и конечные диапазоны сложно оптимизировать в больших таблицах.
Возможно, лучшее решение для этой ситуации - сделать что-то действительно плохое - отделить дату.(Да, 2 ошибки могут составить право на этот раз .)
ID | STAFF_ID | DUTY_ID | date | START_time | END_time
Некоторые проблемы:
- Если смена охватывает полночь, сделайте 2 строки.
- Иметь индекс по
date
или, по крайней мере, начинаться с date
.Тогда даже если запрос должен сканировать все записи за рассматриваемый день, по крайней мере, он будет намного меньше, чем сканирование всей таблицы.(Все другие «очевидные решения» не лучше, чем сканирование половина таблицы.)
Если вы хотите обсудить и обсудить это далее, пожалуйста, предоставьте заявление SELECT
) на основе вашей «схемы» или моей.Не беспокойтесь о производительности;мы можем обсудить, как их улучшить.