Mycat分表统计的一些问题

本文探讨了数据库分片后带来的统计查询变化,包括分片查询导致的结果集合并、对null值的处理、以及在groupby语句中的限制。解决问题的方法涉及使用嵌套SQL进行数值型统计、确保groupby中的字段都在选择列中,以及避免因字段别名或空记录引发的异常。此外,还提到了mycat中间件在功能支持上的局限性。
摘要由CSDN通过智能技术生成

问题一:分片前,统计结果只有一条记录;

               分片后,返回多条(分片数)统计结果记录。

              通过explain可知,分表后相当于SQL分成多个SQL语句查询分表,最后UNION合并结果集。

如下所未

     

解决方式:1. 含有null值的比较棘手。

                   2.如果结果是数值型,则可以用在原始语句外增加一层嵌套SQL统计代码,如

select sum(统计字段) sumval    from(原始SQL语句.... ......)m

问题二、所有在group by从句中的字段都必须包含在被选择的列中。

 java.lang.IllegalArgumentException: all columns in group by clause should be in the selected column list.!DATE_FORMAT(m.cap_time, '%Y%m%d%H')

修改:“group by DATE_FORMAT(m.cap_time,'%Y%m%d%H')”为

group by cap_time

 问题三、异常 java.lang.NullPointerException

   mycat中间件只是为了解决数据分片的问题,但是毕竟只是个中间件,很多功能的支持不是特别完善。 在字段别名出现双引号“”时,出现java.lang.NullPointerException异常。

   另外一种情况是,当外面嵌套一层语句时,由于某些分片的返回是NULL记录,空记录也会在结果集当中,此时用聚合函数也可能出现NullPointerException异常。

这种情况 字段别名的双引号去掉;

 select count(c.id) as "allnum",t.card_name as "name"
from t_car_inout c
left join (
......
) t on t.card_code = c.car_Type
GROUP BY name

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值