如图所示,表i 和o,是无法用到索引的,把查询的IFNULL(SUM(i.givedMoney),0) AS iMoney,这种sum去掉也可以用到索引,count函数不影响,sum的时候结果集为空就会这样。如果把i和o表相关的sum查询去掉,查询时间大概是12S,如果不去掉大概要180S,相差太大了,求大神告知怎么优化。
这种数据有意义吗?这种要从应用程序出发,写一个完整的数据处理过程,把数据取到内存,然后分析内存存储的数据,再返回。
还有你数据采集方法就有问题,在做数据的时候怎么允许这么多的连接,我们在操作数据的时候就做到表与表之间的关系紧密相连,把数据连接变换为数据更新。
比如我像数据库插入A表ID、配置与单号、数量,那么与此同时我在另一个关联的表里面就更新了单号和数量。操作过程用存储过程实现。这种操作就为数据库逻辑性建立了基础,为后来的数据使用节约了查询时机。又比如说我们做ERP软件,在我们做一个表单提交动作的时候,我就已经插入了新的单据记录、更新了日志、更新了库存或者其他的状态、更新了BOM。最后我去查询某个表的时候实际上我们就是单纯的查询一个表,这样我们就为客户节约了查询时机。
我不知道你同意我的做法不,反正这种查询你没做错,但是确切一点你的数据关系和整个数据库耦合性太差,造成你查询慢,而且我也看得明白你是要一个表一个表的去汇总,然后连接查询,汇总的时候就启用了group by机制,在做大量的排列进出栈工作。追问
还有你数据采集方法就有问题,在做数据的时候怎么允许这么多的连接,我们在操作数据的时候就做到表与表之间的关系紧密相连,把数据连接变换为数据更新。
比如我像数据库插入A表ID、配置与单号、数量,那么与此同时我在另一个关联的表里面就更新了单号和数量。操作过程用存储过程实现。这种操作就为数据库逻辑性建立了基础,为后来的数据使用节约了查询时机。又比如说我们做ERP软件,在我们做一个表单提交动作的时候,我就已经插入了新的单据记录、更新了日志、更新了库存或者其他的状态、更新了BOM。最后我去查询某个表的时候实际上我们就是单纯的查询一个表,这样我们就为客户节约了查询时机。
我不知道你同意我的做法不,反正这种查询你没做错,但是确切一点你的数据关系和整个数据库耦合性太差,造成你查询慢,而且我也看得明白你是要一个表一个表的去汇总,然后连接查询,汇总的时候就启用了group by机制,在做大量的排列进出栈工作。追问
有这么多连接很正常啊,没办法 避免
追答现在已经这样了,确实无法避免,我是建议你利用软件手段去分析,逐表取你想要的数据,然后再做分析,多个表不一定要一起去操作
追问哦。
温馨提示:答案为网友推荐,仅供参考