郑文峰的博客 郑文峰的博客
首页
  • python之路
  • go之路
  • 其他
  • redis
  • mysql
  • docker
  • k8s
读书破万卷
周刊
关于
  • 导航 (opens new window)
  • 代码片段 (opens new window)
  • 收藏
  • 友链
  • 外部页面

    • 开往 (opens new window)
  • 索引

    • 分类
    • 标签
    • 归档
GitHub (opens new window)

zhengwenfeng

穷则变,变则通,通则久
首页
  • python之路
  • go之路
  • 其他
  • redis
  • mysql
  • docker
  • k8s
读书破万卷
周刊
关于
  • 导航 (opens new window)
  • 代码片段 (opens new window)
  • 收藏
  • 友链
  • 外部页面

    • 开往 (opens new window)
  • 索引

    • 分类
    • 标签
    • 归档
GitHub (opens new window)
  • python

  • go

  • 其他

    • 分布式锁
    • 使用hue创建ozzie的pyspark action workflow
    • 使用java开发logstash的filter插件
    • count的性能优化
      • 问题
      • 定位问题
      • 查询分析
  • 编程
  • 其他
zhengwenfeng
2022-08-10
目录

count的性能优化

# 问题

今天测试给我提了BUG,发现某个查询接口超时了,超时时间为1分钟。

目前的用的数据库是clickhouse,数据量大概在20亿左右

# 定位问题

我通过调试将查询数据的语句打印出来,查询语句放在数据库中执行,发现几秒就查询完成了,这个时候我就奇了怪了,后面我再仔细看接口的代码,跟踪调试后发现,除了会查询数据之外,还会执行查询数据量的语句。

我将查询数量的语句打印出来,执行该语句,发现是超过1分钟的,看来是定位到问题了。

# 查询分析

语句大概是下面这样的,大概有30多张表,也就是需要union30多张表

select
    count(*)
from
    (
        select
            a_field,
            b_field,
            c_field,
            d_field,
            e_field,
            f_field
        from
            A
        union
        all
        select
            a_field,
            b_field,
            c_field,
            d_field,
            e_field,
            f_field
        from
            B
    )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

这条语句是通过将多个表union成一个大表,然后再count求数量。

问题显而易见,为啥我们要构造一张这么大的表在内存中再count数量,直接count每张表的数量再相加不就是了。优化语句如下:

select
    count(cnt)
from
    (
        select
            count() as cnt
        from
            A
        union
        all
        select
            count() as cnt
        from
            B
    )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

将该语句放在数据库查询,秒级返回,直接从1分钟优化到1秒钟

#性能问题#sql#clickhouse
上次更新: 2023/01/15, 15:47:48
使用java开发logstash的filter插件

← 使用java开发logstash的filter插件

最近更新
01
django rest_framework 分页
03-20
02
学习周刊-第03期-第09周
03-03
03
学习周刊-第02期-第08周
02-24
更多文章>
Theme by Vdoing | Copyright © 2022-2023 zhengwenfeng | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式