关系是否比没有效率的大桌子慢?


8

我在工作中被要求多次违反“第一种标准格式”(使用空/空值重复列中的组),“是为了提高计算机处理能力”。简而言之,“学生”表应至少包含8个空字段(例如电话:phone1,电话2,电话3 ...),而不是我的建议-包含电话号码(以及其他可能的元数据)的“电话”表外键是学生证号。我的老板说,最好以这种方式存储它们,因为“ CPU周期更少,这在Web平台中很重要”,而不是使用关系。我说,在最坏的情况下,它可以忽略不计。

在该示例中,使用关系(假设表在中等大小的Web应用程序中充满了很多记录)比使用这种表架构慢得多?


我相信这样做实际上会比您的老板说的要快,但是您可能要确保确保您不会收到更新异常的任务。但是,如果您需要更改表公用的数据(可能会更改所有电话号码的区号...),则可能会产生更多的cpu工作。
帕特里克

3
我对使用现代硬件的情况严重怀疑,如果您对外键进行索引,那么额外的CPU甚至可以测量,尤其是在Web服务器的另一侧。在我的网站上,我们已对表格进行了归一化处理,并且可以在50,000次点击/秒以上的速度下正常运转,而且不费吹灰之力。告诉你的老板坚持打高尔夫,把技术决定留给你!
盖乌斯

1
@Patrick您认为它快很多还是快一点?我认为就像@Gaius一样,在现代硬件上,即使它“更快”,硬件在速度和耐用性方面的收益也微不足道。
AeroCross 2011年

1
我认为速度提升并不重要。仅当您拥有大量数据集并进行荒谬的联接时,您才会看到性能上的任何明显差异。
Patrick

Answers:


10

我看不出没有任何实际事实来支持它,没有人能发表这样的声明。如果您的查询受CPU限制,那么您应该寻找减少该瓶颈的方法。

听起来您的老板似乎认为非规范化数据库性能最佳,但是我对您的应用程序了解不足,无法确定是否正确。该表的预期删除,更新和插入次数是多少?

我希望这种非规范化的设计可能会减少CPU时间,但希望磁盘I / O会增加。而且从磁盘进行物理读取将比CPU周期昂贵得多,所以也许您的老板有一个非常具体的指标要满足(CPU),因此需要一个非常具体的设计?如果是这样,我将简单地构建所要的内容,并保持运行查询的CPU成本指标。如果看到时间增加,则可能需要建议一些设计更改。

实际上,获得老板想要查看的所有指标列表并随时间跟踪这些指标可能是一个好主意。


事实是,他是一所老学校-在他的人生中(20年?),正如他所建议的那样,WAS很重要,但是今天的硬件和软件功能非常强大,而且通过设计,它的速度更快。但是,与这样的人打交道很困难,因为他有更多的力量,而且经验(但过时的)“事实”表明它的运行速度更快,应该以这种方式考虑。
AeroCross 2011年

1
了解。尝试让他列出要衡量的指标(CPU,磁盘I?O)以及他认为可以接受的指标。然后只需测量这些项目,当问题出现时,您可以提供一些替代方案。这样一来,您可以不费吹灰之力就可以部署更好的设计;让他的设计随着时间的推移证明自己。实际上,这是双赢的。
SQLRockstar 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.