关于MySQL数据库查询优化的几个问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

关于MySQL数据库查询优化的几个问题

2016-02-08 14:01:25 2189 1

请教大家几个关于查询MySQL性能优化的几个问题!

1.比如一张表数据量很大,而我需要根据一段日期范围查询某几个字段的sum,并且group by一个或多个字段,其实某一天的数据量就可能几十万,更不用说一个时间范围了,这个时候应该如何优化这个sum和group by的查询?

2.由于业务需要,先从一张表查询数据,然后进行各种计算,中间也会查其他表,然后把计算的结果入库,但是需要查询的数据量太多,已经优化为按天递增查询,并且每次分页查1000条进行处理,但是跑脚本的时间仍然很长,有什么好的办法优化呢?

取消 提交回答
全部回答(1)
  • 我的中国
    2019-07-17 18:28:20
    已采纳

    1.
    一天几十万,单一天来看数据量是不大。但是,如果你的数据长期放在同一个表中,数据也不小。假设一天50万笔,一年365天就是1.8亿笔(18250万)。如果存放的时间更长,数据量则更大。从上亿笔数据中取一段日期范围(1天,或是1周),需要良好的选择性,而且如果没有其它条件,选择出的数据量也不小。
    SQL执行时,如果只有日期条件,而且日期存放的又是datetime类型,这个字段可能又没有建立索引,那要执行全表扫描(table scan)才能得到几十万或几百万笔数据。成本绝对是高。
    建议:
    1)查看查询计划,看是否是全表扫描。
    2)可以考虑对日期字段增加索引----选择性未必好,加了之后还是要看查询计划,看是否用到了索引。
    3)可以考虑将数据分表保存。按年、或按月保存---跨年、跨月的查询就需要分2个查询或多个查询执行。
    4)如果SUM和group的字段不多,也可以考虑与日期一起建立索引,这样靠索引就可以进行统计(不建议,除非是表功能非常单一)
    5)类似你问题2的方式,提前做好统计。形成按日统计表。(许多进销存系统中都有日结表、月结表等,就是为了可以快速统计某一天的库存,而不需要再根据进销存明细计算库存量)

    2.
    这是一个复杂的需求。慢的地方可能是查询慢、计算慢、关联查询慢、应用间有互相锁/阻塞导致等待等。。。你需要把你的需求详细说明下,同时看是否存在以上的情况。给你一些原则帮助你优化:

    使用并行计算替代串行计算
    尽可能以批的方式获取、处理数据
    查询数据条件尽可能使用索引,请参考查询计划
    关联查询尽可能整批进行,批的大小需要平衡
    数据库连接时间尽量短---不要长连接,以减少并行时的互相影响
    关注数据库锁与阻塞

    0 0
相关问答

1

回答

优化SQL查询过程中的数据访问?

2021-10-02 09:52:19 747浏览量 回答数 1

1

回答

一个SQL问题,如何优化查询过程中的数据访问?

2021-10-01 14:53:24 243浏览量 回答数 1

1

回答

SQL查询数据库方案

2019-12-24 21:43:54 536浏览量 回答数 1

1

回答

sql数据库查询

2016-06-16 16:10:23 1489浏览量 回答数 1

1

回答

关于mysql数据库查询统计的问题

2016-06-08 16:16:39 2153浏览量 回答数 1

1

回答

关于BAE的MYSQL数据库的问题

2016-02-26 15:42:03 2005浏览量 回答数 1

1

回答

mysql大数据查询优化的问题

2016-02-20 15:51:54 2535浏览量 回答数 1

1

回答

复制mysql数据库遇到的问题

2016-02-14 18:13:24 2041浏览量 回答数 1

1

回答

mysql数据查询问题

2016-02-06 14:44:18 1829浏览量 回答数 1

4

回答

关于MYSQL数据库面板的问题

2012-11-04 15:55:02 8285浏览量 回答数 4
+关注
我的中国
R&S网络资深工程师 ,阿里云论坛官方版主,阿里云云计算ACP,春考教学网站长,IT技术晋级之路专辑作者
73
文章
3272
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载