आप पीजी/टेम्पोरल एक्सटेंशन का उपयोग करके रख-रखाव योग्य प्रश्न लिख सकते हैं जो अतिरिक्त रूप से तेज़ हैं:
https://github.com/jeff-davis/PostgreSQL-Temporal
create index on events using gist(period(start_date, end_date));
select *
from events
where period(start_date, end_date) @> :date;
select *
from events
where period(start_date, end_date) && period(:start, :end);
आप इसका उपयोग ओवरलैप को तालिका बाधा के रूप में अस्वीकार करने के लिए भी कर सकते हैं:
alter table events
add constraint overlap_excl
exclude using gist(period(start_date, end_date) WITH &&);
यह वास्तव में आपके विचार से अधिक रखरखाव योग्य है, उदा.:
select *
from events
join generate_series(:start_date, :end_date, :interval) as datetime
on start_date <= datetime and datetime < end_date;
लेकिन उपर्युक्त अवधि प्रकार का उपयोग करना बेहतर है।