У меня есть таблица (start_date, end_date, description)
- чтобы найти события, которые происходят в течение определенного периода, я делаю
SELECT *
FROM table
WHERE start_date < $view_end AND end_date > $view_start
Это работает правильно, и многие продукты баз данных смогут использовать индекс по обоим столбцам для эффективного поиска результата - но SQLite поддерживает использование только одного индекса диапазона за раз (я могу сделать много индексированных сравнений, но только один индексируется больше или меньше). В результате, если я хочу просмотреть средние 10 событий в таблице из миллиона, я могу использовать только один индекс, чтобы исключить половину из них, и мне нужно выполнить полное сканирование таблицы для других 500 000.
Есть ли какие-нибудь интересные приемы, которые я могу сделать, чтобы переписать этот запрос эффективным способом, учитывая ограничения SQLite?