一、数据量展示
material_maxqty_his:8500万
ccc:1300万
二、统计结果
SQL | MariaDB | MySQL | ClickHouse | 描述 | |||
Q1(s) | 96 | 103 | 2 | 按月份统计每月数据条数 | |||
Q2(s) | 117/82 | 122/102 | 2 | 按天统计每天的数据条数 | create_time添加索引 | ||
Q3(s) | 94/24 | 114/29 | 4 | 按plant及VendorCode分组查询最大可交量条数 | plant、vendor_code添加索引 | ||
Q4(s) | 100 | 117 | 3 | 按月份统计每月的平均数 | |||
Q5(s) | 37 | 23 | 1 | 表中数据总条数 | |||
Q6(s) | 1510 | 871 | 10 | 按更细粒度的条件分组查询数据总条数、总数、平均数 | |||
Q7(s) | 43 | 28 | 1 | 统计数据的最大值及最小值 | |||
Q8(s) | 2378 | 1983 | 14 | ClickHouse中的join查询 |
二、SQL分析
Q1
create_time字段是yyyy-MM-dd HH:mm:ss格式的,所以用到了formatDateTime函数,此函数是ClickHouse中独有的,功能类似于MySQL中的dateFormat函数。
此SQL就是按照月份进行分组,查询月份及月内的数据条数
Q2
此SQL将数据分为更细粒度的数据块,按天进行分组,查询每天产生数据条数;
为了公平起见,我在MySQL和MariaDB中添加了创建时间这个字段的索引,发现添加了索引之后查询是要快一些,但跟ClickHouse还是相差很大一个数量级
Q3
按照另外两个字段进行分组统计数据条数,也是添加了索引,有了质的提升,但最终还是干不过ClickHouse
Q4
按照月份统计后,计算平均数,感觉凡是带函数的查询语句都被ClickHouse拿捏了
Q5
查询总数,ClickHouse列式存储的优势又体现了
Q6
按照三个字段分组,分别计算总条数、总数、平均数,差距就出来了,ClickHouse干十秒,MySQL和MariaDB基本上干不出来了。
Q7
函数还包含最大、最小值,也拿来试试
Q8
join查询是ClickHouse的弱项,但是感觉也挺强的。加上了300000以内的id是因为数据量太大查询会报异常。应该是安装ClickHouse没有配置好。