繁体   English   中英

200列表格-300万行-性能

[英]200 column table - 3 million rows - performance

我目前正在一个客户向我提供数据库的项目中,该数据库包括一个包含200列和300万行数据的表。 这绝对是设计不佳的,目前正在探索一些选择。 我在2012 Mbp上开发了该应用程序,内存为16GB的RAM和512 ssd。 我必须使用mvc4开发该应用程序,因此在osx上使用并行8设置了开发和测试环境。 作为设计的一部分,我为客户端开发了一个接口,以对该具有数百行的大型表创建自定义查询,因此我将queryString发送到使用动态linq传递的控制器,并将结果使用JSON发送到视图(以填充kendo ui网格)。 在我的Mbp上,使用我创建的界面测试查询时,最多需要10秒(发现太多时间)才能将结果返回到kendo ui网格。 同样,当我直接在sql server中测试查询时,它永远不会花很长时间。

但是,当我将其部署到客户端以测试这些相同的查询时,需要花费3分钟以上的时间。 长话短说,客户端将升级服务器硬件,但与此同时,他们仍然需要测试应用程序。

我的问题是,尽管该表包含200列,但每一行都是唯一的。 更具体地说,设计是:

PK-(GUID)OrganizationID(FK)-200列(税字段)

如果我将其重新设计为:

PK(GUID)组织ID(FK)字段ID(FK)输入

字段表:FieldID字段名

这会将这300万行数据表变成6亿行,但只有3列。 我会看到性能增强吗?

任何见识将不胜感激-我了解标准化,但我的大部分经验是编程。

提前致谢!

在不知道您在表上运行的查询的情况下,很难做出任何判断。

以下是一些注意事项:

  1. 如果查询仅返回少量行,请确保查询正在使用索引。
  2. 检查您是否有足够的内存将表存储在内存中。
  3. 在进行计时时,请确保忽略第一次运行,因为这只是加载页面缓存。

为了进行测试,只需减小表的大小即可。 那应该加快速度。

至于您有关标准化的问题。 您的非规范化结构比规范化结构占用更少的磁盘空间,因为您不需要为每个值重复键。 如果要在一行上查找一个值,则规范化将无济于事。 您仍然需要扫描索引以找到该行,然后加载该行。 并且,该行将在一页上,而不管它是规范化还是非规范化。 实际上,归一化可能会更糟,因为索引会更大。

有一些查询示例,在这些示例中可以对数据进行标准化。 但是,总的来说,如果您按行获取数据,则您已经拥有了更高效的数据结构。

您可以采用分页方法。 将有2个查询:initial将返回所有行, 仅返回具有唯一ID的列。 该数组可以分为几页,例如每页100个ID。 当用户选择特定页面时-您将100个ID传递给第二个查询,这一次将返回所有200列, 仅返回请求的100行。 这样,您不必一次返回所有行中的所有列,这将大大提高性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM