当前位置: 首页 > 面试题库 >

标准化一个很大的表

郜琦
2023-03-14
问题内容

我面临以下问题。我有一张非常大的桌子。该表是以前从事该项目的人员的传承。该表在MS SQL Server中。

该表具有以下属性:

  1. 它有大约300列。它们都具有“文本”类型,但是其中一些最终应表示其他类型(例如,整数或日期时间)。因此,在使用它们之前,必须先将这些文本值转换为适当的类型
  2. 该表有100余行。该表的空间很快将达到1 TB
  3. 该表没有任何索引
  4. 该表没有任何已实现的分区机制

您可能会猜到,不可能对该表运行任何合理的查询。现在人们只将新记录插入表中,而没有人使用它。因此,我需要对其进行重组。我计划创建一个新结构,并用旧表中的数据重新填充新结构。显然,我将实现分区,但这不是唯一要做的事情。

该表最重要的功能之一是,那些纯文本字段(即不必将其转换为另一种类型)通常具有频繁重复的值。因此,给定列中值的实际变化范围是5到30个不同的值。这引发了进行规范化的想法:对于每个这样的文本列,我将创建一个附加表,其中包含该列中可能出现的所有不同值的列表,然后在该附加表中创建一个(tinyint)主键,然后将在原始表中使用适当的外键,而不是将这些文本值保留在原始表中。然后,我将在此外键列上放置一个索引。用这种方法处理的列数约为100。

它提出了以下问题:

  1. 这种归一化是否真的会提高查询条件在这100个字段中的某些字段上施加条件的速度?如果我们忘记了保留这些列所需的大小,那么由于将初始文本列替换为tinyint列而导致性能会有所提高吗?如果我不进行任何归一化处理,而只是在这些初始文本列上添加索引,那么性能是否将与计划的tinyint列上的索引相同?
  2. 如果我执行上述归一化,则构建一个显示文本值的视图将需要将我的主表与约100个其他表连接在一起。一个积极的时刻是,我将为“ primary key” =“ foreign key”对进行这些联接。但是仍然应该连接大量的表。这是一个问题:对该视图进行查询的性能与对初始非规范化表的查询性能相比是否会更差?SQL Server Optimizer是否真的能够以允许利用规范化好处的方式优化查询?

抱歉,这么长的文字。

感谢您的每条评论!

PS我创建了一个有关加入100张桌子的相关问题。
联接100张桌子


问题答案:

除了针对数据运行查询的速度外,您还将发现标准化数据的其他好处…例如大小和可维护性,仅凭这些就可以证明对其进行标准化…

但是,它也可能会提高查询速度。当前只有一行包含300个文本列的行非常庞大,并且几乎可以肯定已经超过了存储行数据页的8,060字节限制…,而是存储ROW_OVERFLOW_DATALOB_DATA分配单元中。

通过规范化来减小每行的大小,例如用TINYINT外键替换冗余文本数据,并且还通过将不依赖于此大表主键的列删除到另一个表中,数据将不再溢出,并且您每页还可以存储更多行。

至于通过执行JOIN获取标准化数据而增加的开销…如果正确索引了表,则不会增加大量开销。但是,如果确实增加了不可接受的开销,则可以根据需要有选择地对数据进行规范化。



 类似资料:
  • 问题内容: 假设我有一个熊猫数据框: 我想计算数据框的列均值。 这很简单: 然后按列范围max(col)-min(col)。这又很容易: 现在,对于每个元素,我要减去其列的均值并除以其列的范围。我不确定该怎么做 任何帮助/指针将不胜感激。 问题答案:

  • 本文向大家介绍归一化和标准化的区别?相关面试题,主要包含被问及归一化和标准化的区别?时的应答技巧和注意事项,需要的朋友参考一下 归一化: 把数据变成(0,1)之间的小数 把有量纲表达式变成无量纲表达 标准化: 将数据按比例缩放,去除数据单位的限制,将其转化为无量纲的纯数,便于不同单位或量级的指标能够进行比较和加权  

  • 前端标准化 本篇文章主要讲解什么是前后端分离,为什么要做前后端分离,还包括如何将前端工程化、前端编码约定、如何进行写RESTFul资源接口。 我们将前端分成两个工程: 1) WEB工程:主要提供RESTFul资源接口。 2) HTML工程:主要H5和JS,实现前端MVC分层,实现多端的能力。 前端标准化目标:代码可维护、可重构,组件化、可扩展【多端】

  • 我的问题是批处理规范化(BN)正在规范化什么。 我在问,BN是单独标准化每个像素的通道还是一起标准化所有像素的通道。它是在每张图像的基础上还是在整个批次的所有通道上进行的。 具体而言,BN在X上运行。比如说,。因此,当轴=3时,它在“c”维度上运行,即通道数(对于rgb)或特征图数。 因此,假设X是rgb,因此有3个通道。BN是否做到了以下几点:(这是BN的简化版本,用于讨论维度方面。我知道gam

  • 这是我的第一个问题,所以如果我没有正确的提问礼仪,我很抱歉。 我有两个非常凌乱的大表,叫做中心和联系人——一个有公司和地址数据,另一个有联系人、公司和地址数据: 中心: -CompanyGUID(PK) -CompanyName -主电话 -主电子邮件 -地址1 -地址2 -城镇 -邮政编码 注意事项 联系方式: -联系方式(PK) -FirstName -LastName -CompanyNam

  • 问题内容: 我需要规范化值列表以适合概率分布,即介于0.0和1.0之间。 我知道 如何 规范化,但是很好奇Python是否具有自动执行此功能的功能。 我想从: 至 问题答案: 采用 : 对总和进行归一化以确保总和始终为1.0(或尽可能接近)。 采用 相对于最大值归一化