Greenplum行存与列存性能对比

今天给大家分享一个Greenplum中行存与列存的性能对比,在分析型业务中,如果对数据查询的列数不是很多,还是建议优先选用列存。本文涉及的测试用例就能看出列存恰当使用时,性能能提升3倍!!

测试结果对比:

SQL行存响应(ms)列存响应(ms)
SELECT cab_type, count(*) FROM trips GROUP BY cab_type;
9539.6073060.362
SELECT passenger_count,avg(total_amount) FROM trips GROUP BY passenger_count;
7186.3762512.066
SELECT passenger_count, extract(year from pickup_datetime) AS pickup_year,  count(*) FROM trips GROUP BY passenger_count, pickup_year;
9430.0535301.265
SELECT passenger_count,extract(year from pickup_datetime) AS pickup_year,  cast(trip_distance as int) AS distance,count(*) AS the_count FROM trips GROUP BY passenger_count, pickup_year, distance ORDER BY pickup_year, the_count desc;
10616.3586627.922

测试执行过程:

--行存--

postgres=# \timing on
Timing is on.
postgres=# SELECT cab_type,
       count(*)
FROM trips
GROUP BY cab_type;
cab_type |   count   
----------+-----------
yellow   | 400000000
(1 row)

Time: 9539.607 ms
postgres=# SELECT passenger_count,
postgres-#        avg(total_amount)
postgres-# FROM trips
postgres-# GROUP BY passenger_count;
passenger_count |       avg        
-----------------+------------------
             247 |            19.44
             255 |            15.25
               7 | 27.3425925925926
              47 |                9
              36 |            61.55
               4 | 13.9527243251649
              65 |             50.3
             249 |              9.5
             177 |               17
              33 |                9
             129 | 9.43333333333333
               1 | 13.6593432049349
               9 | 21.2552830188679
             254 |              6.5
               6 | 14.0393473844229
               3 | 13.8312939694461
               8 |         25.42975
               0 | 10.6683842285075
             208 | 7.24198473282443
               5 | 13.7613386506018
              58 |            20.74
              10 | 38.0166666666667
              66 |             19.3
               2 | 14.3546975991445
(24 rows)

Time: 7186.376 ms
postgres=# SELECT passenger_count,
postgres-#        extract(year from pickup_datetime) AS pickup_year,
postgres-#        count(*)
postgres-# FROM trips
postgres-# GROUP BY passenger_count,
postgres-#          pickup_year;
passenger_count | pickup_year |   count   
-----------------+-------------+-----------
               7 |        2011 |         2
             255 |        2013 |         2
               3 |        2012 |   7716364
               7 |        2013 |        35
              47 |        2011 |         1
               3 |        2014 |    117300
             254 |        2012 |         1
              10 |        2011 |         2
              58 |        2011 |         1
               2 |        2011 |   6864045
               6 |        2012 |   4880708
               2 |        2013 |  23517494
               6 |        2014 |    111403
              65 |        2012 |         1
             249 |        2012 |         1
             177 |        2012 |         1
               9 |        2014 |         2
               1 |        2012 | 123955714
               5 |        2013 |  10034696
               5 |        2011 |   3471211
               9 |        2012 |        25
               1 |        2014 |   2008131
               8 |        2011 |         1
               8 |        2013 |        25
               0 |        2011 |    805380
               4 |        2012 |   3752549
               0 |        2013 |      5035
             208 |        2013 |        13
             208 |        2011 |         7
               4 |        2014 |     55319
             247 |        2012 |         1
               3 |        2013 |   7315829
Time: 9430.053 ms
postgres=# SELECT passenger_count,
postgres-#        extract(year from pickup_datetime) AS pickup_year,
postgres-#        cast(trip_distance as int) AS distance,
postgres-#        count(*) AS the_count
postgres-# FROM trips
postgres-# GROUP BY passenger_count,
postgres-#          pickup_year,
postgres-#          distance
postgres-# ORDER BY pickup_year,
postgres-#          the_count desc;
passenger_count | pickup_year | distance | the_count
-----------------+-------------+----------+-----------
               1 |        2011 |        1 |  10607963
               1 |        2011 |        2 |   7729133
               1 |        2011 |        3 |   3412674
               2 |        2011 |        1 |   2309318
               1 |        2011 |        4 |   2081972
               1 |        2011 |        0 |   2016713
               2 |        2011 |        2 |   1746024
               5 |        2011 |        1 |   1245490
               1 |        2011 |        5 |   1098301
               5 |        2011 |        2 |    859082
               2 |        2011 |        3 |    816196
               1 |        2011 |        6 |    787657
               3 |        2011 |        1 |    722827
               3 |        2011 |        2 |    542156
               2 |        2011 |        4 |    503827
               1 |        2011 |        7 |    446286
               5 |        2011 |        3 |    429471
               1 |        2011 |        8 |    389943
               1 |        2011 |       10 |    345441
               4 |        2011 |        1 |    345021
               1 |        2011 |        9 |    341023
               2 |        2011 |        0 |    334394
               0 |        2011 |        1 |    303759
               6 |        2011 |        1 |    274382
               2 |        2011 |        5 |    269895
               4 |        2011 |        2 |    265926
               3 |        2011 |        3 |    253013
               5 |        2011 |        4 |    235683
               1 |        2011 |       11 |    228015
               0 |        2011 |        2 |    212231
               6 |        2011 |        2 |    189166
               2 |        2011 |        6 |    189150
Time: 10616.358 ms
postgres=#

--列存--

postgres=# SELECT cab_type,
postgres-#        count(*)
postgres-# FROM trips
postgres-# GROUP BY cab_type;
cab_type |   count   
----------+-----------
yellow   | 400000000
(1 row)

Time: 3060.362 ms
postgres=# SELECT passenger_count,
postgres-#        avg(total_amount)
postgres-# FROM trips
postgres-# GROUP BY passenger_count;
passenger_count |       avg        
-----------------+------------------
              36 |            61.55
               4 |  13.952724325165
              65 |             50.3
             249 |              9.5
             177 |               17
              33 |                9
             129 | 9.43333333333333
               1 | 13.6593432049358
               9 | 21.2552830188679
             254 |              6.5
               6 |  14.039347384423
               3 | 13.8312939694462
               0 | 10.6683842285075
             208 | 7.24198473282443
               8 |         25.42975
               5 | 13.7613386506019
              66 |             19.3
              58 |            20.74
               2 | 14.3546975991445
              10 | 38.0166666666667
              47 |                9
             255 |            15.25
               7 | 27.3425925925926
             247 |            19.44
(24 rows)

Time: 2512.066 ms
postgres=# SELECT passenger_count,
postgres-#        extract(year from pickup_datetime) AS pickup_year,
postgres-#        count(*)
postgres-# FROM trips
postgres-# GROUP BY passenger_count,
postgres-#          pickup_year;
passenger_count | pickup_year |   count   
-----------------+-------------+-----------
               8 |        2011 |         1
               4 |        2012 |   3752549
               0 |        2011 |    805380
               0 |        2013 |      5035
               8 |        2013 |        25
             208 |        2013 |        13
             208 |        2011 |         7
               4 |        2014 |     55319
             247 |        2012 |         1
               3 |        2011 |   2090860
               3 |        2013 |   7315829
               7 |        2012 |        17
              66 |        2012 |         1
              10 |        2012 |         1
               6 |        2011 |    764407
               2 |        2012 |  24900623
               6 |        2013 |   6764789
               2 |        2014 |    389248
             129 |        2013 |         1
               1 |        2011 |  30417318
               5 |        2012 |  12063339
               1 |        2013 | 121959711
              33 |        2011 |         1
               9 |        2013 |        26
             129 |        2011 |         2
               5 |        2014 |    162696
              36 |        2011 |         1
               4 |        2011 |   1018515
               0 |        2012 |   1274858
               4 |        2013 |   3582103
             208 |        2012 |       107
               8 |        2012 |        13
Time: 5301.265 ms
postgres=# SELECT passenger_count,
postgres-#        extract(year from pickup_datetime) AS pickup_year,
postgres-#        cast(trip_distance as int) AS distance,
postgres-#        count(*) AS the_count
postgres-# FROM trips
postgres-# GROUP BY passenger_count,
postgres-#          pickup_year,
postgres-#          distance
postgres-# ORDER BY pickup_year,
postgres-#          the_count desc;
passenger_count | pickup_year | distance | the_count
-----------------+-------------+----------+-----------
               1 |        2011 |        1 |  10607963
               1 |        2011 |        2 |   7729133
               1 |        2011 |        3 |   3412674
               2 |        2011 |        1 |   2309318
               1 |        2011 |        4 |   2081972
               1 |        2011 |        0 |   2016713
               2 |        2011 |        2 |   1746024
               5 |        2011 |        1 |   1245490
               1 |        2011 |        5 |   1098301
               5 |        2011 |        2 |    859082
               2 |        2011 |        3 |    816196
               1 |        2011 |        6 |    787657
               3 |        2011 |        1 |    722827
               3 |        2011 |        2 |    542156
               2 |        2011 |        4 |    503827
               1 |        2011 |        7 |    446286
               5 |        2011 |        3 |    429471
               1 |        2011 |        8 |    389943
               1 |        2011 |       10 |    345441
               4 |        2011 |        1 |    345021
               1 |        2011 |        9 |    341023
               2 |        2011 |        0 |    334394
               0 |        2011 |        1 |    303759
               6 |        2011 |        1 |    274382
               2 |        2011 |        5 |    269895
               4 |        2011 |        2 |    265926
               3 |        2011 |        3 |    253013
               5 |        2011 |        4 |    235683
               1 |        2011 |       11 |    228015
               0 |        2011 |        2 |    212231
               6 |        2011 |        2 |    189166
               2 |        2011 |        6 |    189150
Time: 6627.922 ms
postgres=#

 

转载于:https://my.oschina.net/javacy/blog/2998969

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值