創建一個表來保存您的數據。使用ID,日期,實體名稱和八個布爾字段創建表格。 SQL Server 2008給了我下表的代碼:
CREATE TABLE [dbo].[EntityAvailability](
[EA_Id] [int] IDENTITY(1,1) NOT NULL,
[EA_Date] [date] NOT NULL,
[EA_Entity] [nchar](10) NOT NULL,
[EA_IsAvailable] [bit] NOT NULL,
[EA_IsUnAvailable] [bit] NOT NULL,
[EA_IsBroken] [bit] NOT NULL,
[EA_IsLost] [bit] NOT NULL,
[EA_IsSpare1] [bit] NOT NULL,
[EA_IsSpare2] [bit] NOT NULL,
[EA_IsSpare3] [bit] NOT NULL,
[EA_IsActive] [bit] NOT NULL,
CONSTRAINT [IX_EntityAvailability_Id] UNIQUE NONCLUSTERED
(
[EA_Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
END
GO
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[EntityAvailability]') AND name = N'IXC_EntityAvailability_Date')
CREATE CLUSTERED INDEX [IXC_EntityAvailability_Date] ON [dbo].[EntityAvailability]
(
[EA_Date] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
日期聚集索引將執行最適合您的範圍搜索。永遠不允許沒有日期範圍的搜索,並且除了聚集索引之外不需要任何索引。布爾字段允許只使用一個字節的八種情況。該表的行大小爲35個字節。 230行將適合頁面。您表示您需要存儲1000個日期的10^5個實體,即1億個。一億行將佔用434,782 8K頁或約3演出。
SSD上安裝表,你可以走了。
如果實體是在天10和12免費的,但不是在第11天 - 它應該被認爲是「第10和12之間的自由」? – tucuxi 2011-05-17 13:18:47
它必須明確定義,即如果它在第10天和第12天是空閒的,那麼我們對第11天一無所知。然而,如果存儲時間片段,那麼它可以如此定義:[10,12]是免費的。但我覺得這種方式更復雜。 – Tim 2011-05-17 13:22:59