Asp.net 寻求有关如何使用大量数据构造SQL Server 2008 DB表的建议?
我正在计划一个使用ASP.NET编程的web应用程序,用于管理记录事件的数据库。数据库将在SQL Server 2008中进行管理。每个事件可能来自一组,我们称之为,单位。用户可以通过ASP.NET界面添加和删除这些单元 每个单元都可能记录多达一百万条条目,甚至更多。切断将通过日期进行管理。例如:Asp.net 寻求有关如何使用大量数据构造SQL Server 2008 DB表的建议?,asp.net,sql,sql-server,tsql,Asp.net,Sql,Sql Server,Tsql,我正在计划一个使用ASP.NET编程的web应用程序,用于管理记录事件的数据库。数据库将在SQL Server 2008中进行管理。每个事件可能来自一组,我们称之为,单位。用户可以通过ASP.NET界面添加和删除这些单元 每个单元都可能记录多达一百万条条目,甚至更多。切断将通过日期进行管理。例如: DELETE FROM [tbl] WHERE [date] < '01-01-2011' 或者,通过为每个单元分离表格: CREATE TABLE tblLogUnit_1 (id INT
DELETE FROM [tbl] WHERE [date] < '01-01-2011'
或者,通过为每个单元分离表格:
CREATE TABLE tblLogUnit_1 (id INT PRIMARY INDEX, dtIn DATETIME2, dtOut DATETIME2, etc INT)
CREATE TABLE tblLogUnit_2 (id INT PRIMARY INDEX, dtIn DATETIME2, dtOut DATETIME2, etc INT)
CREATE TABLE tblLogUnit_3 (id INT PRIMARY INDEX, dtIn DATETIME2, dtOut DATETIME2, etc INT)
--and so on
CREATE TABLE tblLogUnit_N (id INT PRIMARY INDEX, dtIn DATETIME2, dtOut DATETIME2, etc INT)
从引用条目的角度来看,方法1似乎更简单,因为使用方法2,我必须处理可变的N个表,正如我所说的,用户将被允许添加和删除单元
但方法1可能会导致以后访问这些日志条目的效率非常低。我必须通过ASP.NET界面从这些日志生成报告
所以在我开始编码之前,我想听听你对此的看法
编辑:我没有意识到表中的列数有什么不同。我的错!一个表中的实际列数是16。我会选择方法1,因为该表在宽度方面似乎不太大,YOU可以应用索引来改进搜索/选择 此外,还可以查看分区表和索引
我将使用方法1,因为表在宽度方面似乎不是很大,并且YOU可以应用索引来改进搜索/选择 此外,还可以查看分区表和索引
很大程度上取决于您打算如何使用这些数据。如果将数据拆分为多个表,您将在多个表上进行查询,还是所有查询都在定义的日期范围内。数据插入和更新的频率 换句话说,没有正确的答案
另外,为了使用分区表,您是否能够为SQL enterprise提供许可证?很大程度上取决于您打算如何使用这些数据。如果将数据拆分为多个表,您将在多个表上进行查询,还是所有查询都在定义的日期范围内。数据插入和更新的频率 换句话说,没有正确的答案
另外,为了使用分区表,您是否能够为SQL enterprise提供许可证?在单独的表中拆分将产生更好的插入和搜索速度
对于一个表,差异是idUnit上的索引。有了这个索引,搜索速度将几乎和单独的表一样快,您可以通过单个查询跨idUnits进行搜索。一个表将受到影响的地方是insert,但这是一个很小的影响。在单独的表中拆分将产生更好的插入和搜索速度
对于一个表,差异是idUnit上的索引。有了这个索引,搜索速度将几乎和单独的表一样快,您可以通过单个查询跨idUnits进行搜索。其中一个表将受到影响的是insert,但这只是一个小影响。我使用SQL Server 2008 Express对实际数据进行了一些测试,使用本地计算机连接,没有网络延迟。测试的计算机:桌面,Windows7Ultimate,64位,CPU:i7,@2.8GHZ,4核;内存:8GB;硬盘操作系统:1TB,260GB免费 首先,所有记录都位于一个表中,方法1。所有记录均由随机数据生成。一个处理每个特定unitID的复杂SELECT语句被一个接一个地尝试了两次,CPU负载:12%到16%,RAM负载:53%到62%。结果如下:
UnitID NumRecords Complex_SELECT_Timing
1 486,810 1m:26s / 1m:13s
3 1,538,800 1m:13s / 0m:51s
4 497,860 0m:30s / 0m:24s
5 497,860 1m:20s / 0m:50s
然后,相同的记录被分成四个具有相同结构的表,方法2。然后,我在同一台PC上以相同的CPU和RAM负载运行了两次相同的SELECT语句。下面是结果:
Table NumRecords Complex_SELECT_Timing
t1 486,810 0m:19s / 0m:12s
t3 1,538,800 0m:42s / 0m:38s
t4 497,860 0m:03s / 0m:01s
t5 497,860 0m:15s / 0m:12s
我想和感兴趣的人分享这个。这几乎给了你答案
谢谢大家的贡献 我使用SQL Server 2008 Express对实际数据进行了一些测试,使用本地计算机连接,没有网络延迟。测试的计算机:桌面,Windows7Ultimate,64位,CPU:i7,@2.8GHZ,4核;内存:8GB;硬盘操作系统:1TB,260GB免费 首先,所有记录都位于一个表中,方法1。所有记录均由随机数据生成。一个处理每个特定unitID的复杂SELECT语句被一个接一个地尝试了两次,CPU负载:12%到16%,RAM负载:53%到62%。结果如下:
UnitID NumRecords Complex_SELECT_Timing
1 486,810 1m:26s / 1m:13s
3 1,538,800 1m:13s / 0m:51s
4 497,860 0m:30s / 0m:24s
5 497,860 1m:20s / 0m:50s
然后,相同的记录被分成四个具有相同结构的表,方法2。然后,我在同一台PC上以相同的CPU和RAM负载运行了两次相同的SELECT语句。下面是结果:
Table NumRecords Complex_SELECT_Timing
t1 486,810 0m:19s / 0m:12s
t3 1,538,800 0m:42s / 0m:38s
t4 497,860 0m:03s / 0m:01s
t5 497,860 0m:15s / 0m:12s
我想和感兴趣的人分享这个。这几乎给了你答案
谢谢大家的贡献 谢谢。尽管如此,实际表格的宽度要宽得多。我没有
'此处不包括所有列。实际的表有16列,这似乎还不太复杂。可能提供完整的表架构,因为某些列类型可能会影响性能。我还没有在SQL Server中配置它。我在VS2010的一个测试web应用程序中设置了它。但我不确定如何从中获得模式?我发布了VS2010中实际DB表结构的屏幕截图。即使如此,我还是希望使用单个表,并可能将表/索引分区视为性能增强。谢谢。尽管如此,实际表格的宽度要宽得多。我在这里没有包括所有的专栏。实际的表有16列,这似乎还不太复杂。可能提供完整的表架构,因为某些列类型可能会影响性能。我还没有在SQL Server中配置它。我在VS2010的一个测试web应用程序中设置了它。但我不确定如何从中获得模式?我发布了VS2010中实际DB表结构的屏幕截图。即使如此,我还是宁愿使用单个表,并可能将表/索引分区视为性能增强。是的,我了解所有这些。我现在正在做一些测试,因为我在这里得到了相互矛盾的答案。尽管如此,我还是想弄清楚——每个人都提到大桌子,但什么是大桌子?这取决于你的视角。对于FaceBook开发者来说,10亿美元是微不足道的。对我来说,10亿是巨大的,标准SQL在大多数情况下仍能处理它。选择计数*需要2分钟。在我看来,您正在进行投机性优化,这只会产生复杂的代码。做1表的简单答案,如果您有性能问题,请进行优化。是的,我了解所有这些。我现在正在做一些测试,因为我在这里得到了相互矛盾的答案。尽管如此,我还是想弄清楚——每个人都提到大桌子,但什么是大桌子?这取决于你的视角。对于FaceBook开发者来说,10亿美元是微不足道的。对我来说,10亿是巨大的,标准SQL在大多数情况下仍能处理它。选择计数*需要2分钟。在我看来,您正在进行投机性优化,这只会产生复杂的代码。完成表1中的简单答案,并在出现性能问题时进行优化。