你这个需求,就是N个表的各自SUM求和,无论用什么语句,从效率上是没法提高的,因为数据运算没法避免。
给你几个参考建议:
左连接是没有必要的,你需要的其实就是不同表各自的sum,应该各自查询就好了
分开语句写,语句更精简
这样的需求,最好使用存储过程和循环语句,在需求上可以更灵活,可以查询任意天数和任意起始日期的数据
当数据量很多(天数积累),并且查询比较频繁的时候,应该引入“中间表”或“临时表”,表中每条记录记录一天的sum值(可以通过存储过程或者定时任务维护),这样再次查询会更有效率。
1、sql语句的执行计划是否正常。
2、减少应用和数据库的交互次数、同一个sql语句的执行次数。
3、数据库实体的碎片的整理(特别是对某些表经常进行insert和delete动作,尤其注意,索引字段为系列字段、自增长字段、时间字段,对于业务比较频繁的系统,最好一个月重建一次)。 4、减少表之间的关联,特别对于批量数据处理,尽量单表查询数据,统一在内存中进行逻辑处理,减少数据库压力(java处理批量数据不可取,尽量用c或者c++ 进行处理,效率大大提升)。
5、对访问频繁的数据,充分利用数据库cache和应用的缓存。
6、数据量比较大的,在设计过程中,为了减少其他表的关联,增加一些冗余字段,提高查询性能。
确实会发生这样的情况,我也有此经历,发生这样的状况是在Oracle数据库下,而查询涉及的一个表的数据量很大,假设为A表,在开始的时候并未带出A的字段,所以查询速度还可以;后来查询带上A表的一个字段,执行很久没有结果。从执行计划中可以看到,增加字段前后查询的执行计划发生变化了,没有带A的字段时,A表有按索引查询,而带A表的字段之后,A表则未按索引查询,而是表扫描,这当然很耗时间了!
经过反复试验都是如此,后来只好改变查询将获取A表的字段放到子查询中执行,才避免了速度变慢。
对应此种情况,我们一般要改变查询语句,或者增加索引,以使查询走索引,这样才不会效率低下。
以上就是关于MYSQL 如何优化LEFF JOIN多张表的查询效率全部的内容,包括:MYSQL 如何优化LEFF JOIN多张表的查询效率、数据库优化可以从哪些方面进行优化、多表关联查询效率就很低,有没有只改SQL的优化方案等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)