日期:2014-05-17  浏览次数:20469 次

一个简单的sql性能问题,求帮助

sum(case when gmv>=0 and gmv<0.5e6 then gmv else 0 end)/sum(gmv) t7,
   sum(case when gmv>=0.5e6 and gmv<0.2e8 then gmv else 0 end)/sum(gmv) t8,
   sum(case when gmv>=0.2e8 and gmv<0.1e9 then gmv else 0 end)/sum(gmv) t9,
   sum(case when gmv>=0.1e9 and gmv<0.5e9 then gmv else 0 end)/sum(gmv) t10,
   sum(case when gmv>=0.5e9 and gmv<0.1e10 then gmv else 0 end)/sum(gmv) t11,
   sum(case when gmv>=0.1e10 then gmv else 0 end)/sum(gmv) t12

这里面 sum(gmv) 计算出来是个很大的金额,我不清楚上面sql执行的过程,我担心会重复计算很多次,
那有没有必要我先查出sum(gmv),然后传给上面语句的除数那里,会有两次数据库操作, 性能方面怎么说? 
性能优化

------解决方案--------------------
不会,内部解析和编译会正确处理性能
------解决方案--------------------
查询引擎会自动优化的,至于性能,你可以两种写法都测试一下
------解决方案--------------------
引用:
Quote: 引用:

sun(gmv) 赋值给一个变量,后面语句直接使用变量不就没有重复计算的问题了?

我不是不知道会不会重复计算嘛,你知道否?

不会.