個々のクエリは10ミリ秒で実行され、UNION ALLでは290ミリ秒以上かかります(7.7MレコードMySQL DB)。最適化するには?
教師が利用できる予定を保存するテーブルがあり、2種類の挿入が可能です。 時間単位:教師ごとに1日あたり無制限のスロットを追加する自由(スロットがオーバーラップしない限り):4月15日、教師は10:00、11:00、12:00、16:00にスロットを持つことができます。特定の教師の時間/スロットを選択すると、担当者が対応します。 時間帯/範囲:4月15日/ 4月に別の教師が10:00から12:00まで、そして14:00から18:00まで働くことができます。人は到着順に提供されるため、教師が10:00から12:00に勤務している場合、この期間に到着するすべての人には到着順に参加します(ローカルキュー)。 検索で利用可能なすべての教師を返す必要があるため、到着範囲の順序と同じテーブルにすべてのスロットを保存する必要があります。この方法では、date_from ASCで注文でき、最初に利用可能なスロットを検索結果の最初に表示します。 現在のテーブル構造 CREATE TABLE `teacher_slots` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `teacher_id` mediumint(8) unsigned NOT NULL, `city_id` smallint(5) unsigned NOT NULL, `subject_id` smallint(5) unsigned NOT NULL, `date_from` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `date_to` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `status` tinyint(4) NOT NULL …