Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 寻求有关如何使用大量数据构造SQL Server 2008 DB表的建议?_Asp.net_Sql_Sql Server_Tsql - Fatal编程技术网

Asp.net 寻求有关如何使用大量数据构造SQL Server 2008 DB表的建议?

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

我正在计划一个使用ASP.NET编程的web应用程序,用于管理记录事件的数据库。数据库将在SQL Server 2008中进行管理。每个事件可能来自一组,我们称之为,单位。用户可以通过ASP.NET界面添加和删除这些单元

每个单元都可能记录多达一百万条条目,甚至更多。切断将通过日期进行管理。例如:

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中的简单答案,并在出现性能问题时进行优化。