酒店价格表结构这样设计是否合理
表名为Hotel_Rates, 表结构如下:
Rates_id int 主键ID
Rooms_cod nvarchar(50) 主库房型ID
Hotel_id int 子库酒店ID
Hotel_cod nvarchar(50) 主库酒店ID
Rooms_id int 子库房型ID
Duration int 年月,格式如:201101
UpdateTime varchar(50) 价格更新时间
Gys_id nvarchar(100) 供应商ID
然后是价格 共31个字段,名称分别为 Price_1到Price_31
Price_1 varchar(50) 存储当天的价格 数据格式为 价格#早餐类型#房间数#出售状态 例如 150#0#0#0
查询价格的时候,如果是2014-9-24的话,就根据酒店id,房型id,供应商id,查询到Duration为201409,然后得到Price_24这个字段的值,但是在实际操作的时候,这个酒店价格表是和房型表,酒店表,供应商表inner join 查询的,数据量一大就出问题了,
例如: 当查询的日期条件为9月20日和9月21日时,查询速度很慢,要一分钟左右才出结果,查询执行计划 :提示要创建的索引为:CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[Hotel_Rates] ([Duration])
INCLUDE ([Hotel_cod],[Rooms_id],[Price_20],[Price_21],[Gys_id])
但问题是查询的日期条件是不固定的,在实际的操作中,可能查询的字段是Price_1到Price_31的任意多个字段,这样是无法创建固定的索引来优化的,是不是表结构要改呢?如果要改应该如何改呢?