我有一个tableA,它包含以下结构
我将此结构修改为如下所示的tableB以减少行数,类别是固定长度
假设在修改为新结构后,tableA中有21万个数据,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中的性能会降低?
答案 0 :(得分:1)
MySQL经过优化,可加快关系操作。加快MySQL可以执行的其他操作并没有太多的努力。 Cate1 + Cate2 + Cate3是一个完全合法的操作,但没有什么特别的关系。
就数据的关系模型而言,Table1实际上比Table2更简单,即使Table1有更多的行。值得注意的是,Table1符合第一范式,但Table2没有。这三列实际上是一个重复的组,即使它看起来像是不是。
所以First Normal形式在性能方面(大多数时候)对你有好处。
答案 1 :(得分:0)
在你的第一个查询中,mysql只需要进行求和。 (1个过程)
在第二个查询中,mysql首先需要沿三列添加算术,然后对结果进行求和。(2过程)。