postgressql统计优化问题

椰树海岛 2012-09-24 06:01:45
请问以下语言怎么优化?
该语句的目的为了统计出我的表中的5个状态:
其中data5 是全部



SELECT
sum(
CASE WHEN
oh.data_status_id = 10000 or
oh.data_status_id = 10001
THEN 1 ELSE 0 END
) AS data1,
sum(
CASE WHEN oh.data_status_id = 10008 or
oh.data_status_id = 10009 or
oh.data_status_id = 10010 or
oh.data_status_id = 10002 or
oh.data_status_id = 10003 or
oh.data_status_id = 10014 or
oh.data_status_id = 100 or
oh.data_status_id = 200 or
oh.data_status_id = 300 or
oh.data_status_id = 400 or
oh.data_status_id = 700 or
oh.data_status_id = 800
THEN 1 ELSE 0 END) AS data2,
sum(
CASE WHEN oh.data_status_id = 900
THEN 1 ELSE 0 END
) AS data3,
sum(
CASE WHEN oh.data_status_id = 10016
THEN 1 ELSE 0 END
) AS data4,
sum(
CASE WHEN 1 = 1 THEN 1 ELSE 0 END
) AS data5
FROM lscm_ta_order_header oh where oh.status = '1' and oh.if_del = '0'



是否在java中分开一个一个查询再合并数据更有效率.
数据量在200W左右,有月份时间限制

求数据库大内高手答疑,谢谢
...全文
95 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
椰树海岛 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

语句没什么问题。 前面的 sum(case when 并不会有太多的消耗。 SELECT的主要优化在WHERE上。

你的表上只要创建 create index xxx on lscm_ta_order_header (status,if_del) 即可。
[/Quote]

谢谢兄弟回复,但是有人说,这个查询在case when上会有全表搜索.可能会有性能消耗,这个怎么理解?
我觉得postgreSQL API中有这类的例子,引擎也可能会做自动优化...
ACMAIN_CHM 2012-09-24
  • 打赏
  • 举报
回复
语句没什么问题。 前面的 sum(case when 并不会有太多的消耗。 SELECT的主要优化在WHERE上。

你的表上只要创建 create index xxx on lscm_ta_order_header (status,if_del) 即可。
椰树海岛 2012-09-24
  • 打赏
  • 举报
回复
我只是想在一条语句中搞定而已

956

社区成员

发帖
与我相关
我的任务
社区描述
PostgreSQL相关内容讨论
sql数据库数据库架构 技术论坛(原bbs)
社区管理员
  • PostgreSQL社区
  • yang_z_1
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧