【发布时间】:2010-09-22 16:48:15
【问题描述】:
我的简化和人为的例子如下:-
假设我想每天测量和存储世界上所有城镇的温度(和其他值)。我正在寻找一种存储数据的最佳方式,以便获得所有城镇的当前温度,就像获得一个城镇的历史温度一样容易。
这是一个很容易解决的问题,但我正在寻找最佳解决方案。
我能想到的两个主要选项如下:-
选项 1 - 同一张表存储当前和历史记录
将所有当前记录和存档记录存储在同一个表中。
即
CREATE TABLE [dbo].[WeatherMeasurement](
MeasurementID [int] Identity(1,1) NOT Null,
TownID [int] Not Null,
Temp [int] NOT Null,
Date [datetime] NOT Null,
)
这将使一切变得简单,但是获取城镇列表和当前温度的最有效查询是什么?一旦表中有数百万行,这会扩展吗?在表中添加某种 IsCurrent 标志有什么好处吗?
选项 2 - 将所有存档记录存储在单独的表中
会有一个表格来存储当前的实时测量值
CREATE TABLE [dbo].[WeatherMeasurement](
MeasurementID [int] Identity(1,1) NOT Null,
TownID [int] Not Null,
Temp [int] NOT Null,
Date [datetime] NOT Null,
)
还有一个存储历史存档日期的表(可能由触发器插入)
CREATE TABLE [dbo].[WeatherMeasurementHistory](
MeasurementID [int] Identity(1,1) NOT Null,
TownID [int] Not Null,
Temp [int] NOT Null,
Date [datetime] NOT Null,
)
这样做的好处是保持当前主要数据精简,查询效率很高,但代价是架构更复杂,插入数据的成本更高。
哪个是最好的选择?还有没有我没有提到的更好的选择?
注意:我已简化架构以帮助更好地集中我的问题,但假设每天都会插入大量数据(100,000 条记录),并且数据是一天的最新数据。当前数据与历史数据一样可能被查询。
【问题讨论】:
-
选择你的两个选项,让他们回答,这样我们就可以投票了
标签: sql sql-server performance tsql sql-server-2008