Förmodligen överdrivet för din applikation - men:
Ett relativt enkelt sätt att förbättra dina sökningar på bekostnad av att göra "skrivprocessen" mer komplicerad är att ändra bokningstabellen så att den blir en "Tillgänglighetstabell".
Lägg till i en boolesk kolumn för att indikera om spelplatsen är ledig eller bokad (eller ännu hellre ange id för kunden som har bokat den, och använd 0 om spelplatsen är ledig).
Börja med en enda ledig plats, 1 januari 2009 -> 31 december 20??
När du får en bokning dela upp den lediga luckan i 3 (två inlägg och en uppdatering), den bokade luckan och de två tillgängliga luckorna.
Fortsätt göra det och när tidsramen blir mer fragmenterad kommer bokningsprocessen att bestå av något av följande:
- Tilldela en hel "tillgänglig plats" till någon (en uppdatering)
- Dela upp en "tillgänglig plats" i två (en uppdatering och en infogning)
- Dela en plats i 3 (enligt ovan) om någon bokar mittsektionen från en tillgänglig plats.
Det är inte otroligt komplicerat att hantera och sökprocessen blir en enkel fråga:att hitta tillgängliga platser inom den önskade tidsramen (bokat=falskt eller kund-id=0, vilken väg du än går med det) där slutdatum - startdatum>=numret antal dagar du vill ha.
Det fördubblar storleken på boknings-/tillgänglighetstabellen och gör bokningar mindre enkla, men avvägningen är att sökprocessen är ungefär så enkel som den blir.