从我下面的查询中可以看到,我正在更新 percenting_pages
以及 percentile_visits
公司1的列。
UPDATE mytable
SET percentile_pages = CASE
WHEN pages >= 1
AND pages < 2 THEN 25
WHEN pages >= 2
AND pages < 3 THEN 35
WHEN pages >= 3
AND pages < 5 THEN 40
WHEN pages >= 5 THEN 45
ELSE percentile_pages
END,
percentile_visits = CASE
WHEN visits >= 2
AND visits < 3 THEN 25
WHEN visits >= 3
AND visits < 4 THEN 35
WHEN visits >= 4
AND visits < 6 THEN 40
WHEN visits >= 6 THEN 45
ELSE percentile_visits
END
WHERE company = 1
之后,在额外的这两列中( percentile_visits
以及 percentile_pages
)为了更新 total_percentile
列。
我想做的是避免更新 percentile_visits
以及 percentile_pages
只更新一列 total_percentile
.
这当然可以让我优化我的应用程序。有没有什么方法可以编辑查询,而不是更新列,对每个“值”求和?
3条答案
按热度按时间uemypmqf1#
可以这样添加值
如果您只需要总百分位数,并为此删除列
percentile_pages
以及percentile_visits
然后你可以用total_percentile
第二次设置为0或者如果你需要更新所有的3列
jtoj6r0c2#
你的“优化”似乎毫无意义。在更新上花费的大部分时间涉及记录和修改数据,而不是设置单个列。更新一行中的三列与更新一列的开销完全相同,因为整行是一个单元。
我可以建议简化你的代码。这不是性能优化,只是一种简化:
为什么要更新
total_percentile
不会做你想做的是下一次更新。在这种情况下visits
或者pages
如果不更改,则需要percentile_pages
以及percentile_visits
.在任何情况下,不更新单个值都不会带来真正的性能提升。
lx0bsm1f3#
您说要更新列。所以我假设“总和”并不是指总和
SUM()
函数,否则将更新行值(可能是company=id\u all?)的值。如果我的假设是正确的,你可以说
这两个案例是您已经使用的案例,但else已被0替换。这会在pages=1和visits=0时创建一个边框,但我认为这不太可能。
该查询将适用于单个公司,或任何选定的公司。