【发布时间】:2012-05-16 07:51:16
【问题描述】:
我为一家拥有大约 150 家酒店的旅行社开发了一个使用 php 和 mysql 管理酒店价格、分配和预订的系统。 由于酒店房价因日期而异,表设计大致如下
hotel_tbl{
hotel_id,
hotel_name
}
room_type_tbl{
room_type_id,
room_type_name,
hotel_id
}
room_rates_tbl{
room_type_id,
**from_date,
**till_date,
meal_basis,//(Breakfast,halfboard,fullboard) BB,HB,FB
sleeps,//(Single,Double,Triple) SGL,DBL,TPL
currency,
room_rate
}
由于酒店价格随日期波动,当我查询表以进行复杂的旅游套餐计算(涉及多家酒店)时,我注意到性能比预期的要慢。我的问题是,如果我在每个日期都有一个价格行而不是使用日期范围(我的系统包含大约 150 家酒店),您认为性能会提高吗,如下所示:
room_rates_tbl { // A row for each day as opposed to using a date range
room_type_id,
**date,
meal_basis,//(Breakfast,halfboard,fullboard) BB,HB,FB
sleeps,//(Single,Double,Triple) SGL,DBL,TPL
currency,
room_rate}
希望问题足够清楚......
我已更新我的问题以使其更清楚。房间类型例如是“标准房”或“豪华房”或“家庭房”,睡眠将包含单人房、双人房等。我已从问题中删除了 market_type,因为它与市场组无关(例如国家)的费率是 targarted。我的问题是在查询费率表时,存储日期费率是否比使用日期范围更有效。
【问题讨论】:
-
在更改数据结构之前,首先确保您对用于查找的每一列都有索引并且它们被正确使用(检查
EXPLAIN查询的输出)。 -
@eggyal 谢谢,我将在列中添加索引,如何在查询输出中使用 EXPLAIN?
-
在你的查询前加上
EXPLAIN这个词,让 MySQL 向你展示它的执行计划。 -
@ChrisWalton 我已经更新了我的问题以使其更清楚。房间类型例如是“标准房”或“豪华房”或“家庭房”,睡眠将包含单人房、双人房等。我已从问题中删除了 market_type,因为它与市场组无关(例如国家/地区)费率的目标是。我的问题是在查询费率表时,存储日期费率是否比使用日期范围更有效。
-
@eggyal 谢谢你,我会试着解释一下..