0

我有一个 tableA 它包含以下结构

在此处输入图像描述

我将此结构修改为如下所示的 tableB 以减少行数,并且类别为固定长度

在此处输入图像描述

假设我在修改为新结构后 tableA 中有 210 万数据 tableB 仅包含 70k 行

在某些情况下,我想将所有值汇总到表中,

QUERY1: SELECT SUM(val) AS total FROM tableA;

vs

QUERY2: SELECT SUM(cate1+cate2+cate3) AS total FROM tableB;

与 QUERY2 相比,QUERY1 的执行速度更快。

与 tableA 相比,tableB 包含更少的行

正如我的预期,QUERY2 更快,但 QUERY1 是最快的。

帮助我了解为什么 QUERY2 中的性能会降低?

4

2 回答 2

1

MySQL 被优化以加速关系操作。在加速 MySQL 可以执行的其他类型的操作方面没有太多努力。Cate1+Cate2+Cate3 是完全合法的操作,但没有什么特别相关的。

就数据的关系模型而言,Table1 实际上比 Table2 更简单,尽管 Table1 的行数更多。顺便提一下,Table1 符合第一范式,但 Table2 不符合。这三列实际上是一个重复的组,即使看起来它们不是。

所以第一范式在性能方面对你有好处(大多数时候)。

于 2013-08-07T09:45:14.017 回答
0

在您的第一个查询中,mysql 只需要进行求和。(1个过程)

在您的第二个查询中,mysql 首先需要沿三列进行算术加法,然后对结果进行求和。(2 过程)。

于 2013-08-07T09:31:51.733 回答