一度に1週間だけを確認する場合は、すべての開始/終了時間を正規化して、週の開始からの分数、たとえば日曜日の0時間に設定できます。ストアごとに、[startTime、endTime、storeId]の形式のタプルをいくつか作成します。 (日曜日の深夜にまたがる時間の場合、2つのタプルを作成する必要があります。1つは週の終わりに、もう1つは週の初めに始まります)。このタプルのセットは、startTimeとendTimeの両方でインデックス付けされます(たとえば、前処理するツリーを使用して)。タプルはそれほど大きくするべきではありません。1週間に1万分しかなく、2バイトに収まります。この構造は、適切なインデックスを持つMySQLテーブル内で適切であり、情報が変更されたときのレコードの絶え間ない挿入と削除に対して非常に回復力があります。クエリは単純に「selectstoreIdwherestartTime <=time and endtime> =time」になります。ここで、timeは日曜日の深夜からの正規化された分数です。
情報があまり頻繁に変更されず、ルックアップを非常に高速にしたい場合は、考えられるすべてのクエリを事前に解決して、結果をキャッシュすることができます。たとえば、1週間に672時間の期間しかありません。 Brandon Rhodesのソリューションのように、それぞれに開店時間と閉店時間のリストが含まれているビジネスのリストを使用すると、1週間に15分ごとに繰り返し、誰が営業しているかを把握し、ルックアップテーブルに回答を保存できます。またはメモリ内リスト。