这条Pgsql很忙优化下:select id,(select sum((case when fee_type=2 then -amount else amount end)) from bms.fin_bank_water_bill where is_delete = 'f' and (transaction_time<t.transaction_time or (transaction_time=t.transaction_time and id<=t.id)) and belong_subject_id=151 ) as balance from bms.fin_bank_water_bill t where t.is_delete = 'f' and belong_subject_id=151
时间: 2023-03-05 22:55:38 浏览: 144
osm2pgsql-docker-quickstart:osm2pgsql和postgis的简单docker-compose设置
这条 Pgsql 语句的作用是从表 bms.fin_bank_water_bill 中选取属于主题 151 的记录,并根据条件计算出每一条记录对应的余额,同时返回每条记录的 id 和余额。但是,由于语句嵌套和子查询的使用,这条语句可能存在性能问题。
为了优化这条语句,可以考虑以下几个方面:
1. 尽可能减少子查询的使用。可以使用 JOIN 或者子查询优化技巧来代替子查询,减少查询次数。
2. 尽可能减少表的扫描次数。可以添加索引或者使用表分区等技术,以提高查询效率。
3. 精简查询条件,尽量避免使用复杂的逻辑运算符。可以对查询条件进行合理的拆分和组合,避免重复计算和表扫描。
针对具体的查询语句,我们可以结合实际情况进行分析和优化。
阅读全文