借助Monetdb计算不同的性能

时间:2019-02-12 11:21:59

标签: sql count monetdb

这是我遇到的一个简单的性能问题:

  • 我用CTAS语句创建表C。我分析统计信息并设置主键
  • 我尝试在PK字段上进行“非重复计数”类型查询(在所有表上都没有过滤器)。速度很慢,我的硬盘驱动器要求很高。

select count更快。

所以我有以下问题:

  • 为什么尽管统计数字,但非重复查询却很慢?
  • 如果我要计数的字段是PK(或字段集是PK),则它与计数完全相同。那么为什么时间不一样?
  • 如果这些问题是设计问题,我该如何解决?

有关信息:Windows 10上的Monetdb 11.31.13

作为信息,下面是查询的解释

 sql>explain select count(distinct salesorderdetailid) from formation.salesorderdetails;
+-----------------------------------------------------------------------------+
| mal                                                                         |
+=============================================================================+
| function user.s10_1():void;                                                 |
|     X_1:void := querylog.define("explain select count(distinct salesorderde |
: tailid) from formation.salesorderdetails;":str, "default_pipe":str, 14:int) :
: ;                                                                           :
| barrier X_133:bit := language.dataflow();                                   |
|     X_4:int := sql.mvc();                                                   |
|     C_70:bat[:oid] := sql.tid(X_4:int, "formation":str, "salesorderdetails" |
: :str, 0:int, 4:int);                                                        :
|     X_77:bat[:int] := sql.bind(X_4:int, "formation":str, "salesorderdetails |
: ":str, "salesorderdetailid":str, 0:int, 0:int, 4:int);                      :
|     X_90:bat[:int] := algebra.projection(C_70:bat[:oid], X_77:bat[:int]);   |
|     (X_97:bat[:oid], C_98:bat[:oid], X_99:bat[:lng]) := group.groupdone(X_9 |
: 0:bat[:int]);                                                               :
|     X_100:bat[:int] := algebra.projection(C_98:bat[:oid], X_90:bat[:int]);  |
|     C_72:bat[:oid] := sql.tid(X_4:int, "formation":str, "salesorderdetails" |
: :str, 1:int, 4:int);                                                        :
|     X_78:bat[:int] := sql.bind(X_4:int, "formation":str, "salesorderdetails |
: ":str, "salesorderdetailid":str, 0:int, 1:int, 4:int);                      :
|     X_91:bat[:int] := algebra.projection(C_72:bat[:oid], X_78:bat[:int]);   |
|     (X_101:bat[:oid], C_102:bat[:oid], X_103:bat[:lng]) := group.groupdone( |
: X_91:bat[:int]);                                                            :
|     X_104:bat[:int] := algebra.projection(C_102:bat[:oid], X_91:bat[:int]); |
|     C_74:bat[:oid] := sql.tid(X_4:int, "formation":str, "salesorderdetails" |
: :str, 2:int, 4:int);                                                        :
|     X_79:bat[:int] := sql.bind(X_4:int, "formation":str, "salesorderdetails |
: ":str, "salesorderdetailid":str, 0:int, 2:int, 4:int);                      :
|     X_92:bat[:int] := algebra.projection(C_74:bat[:oid], X_79:bat[:int]);   |
|     (X_105:bat[:oid], C_106:bat[:oid], X_107:bat[:lng]) := group.groupdone( |
: X_92:bat[:int]);                                                            :
|     X_108:bat[:int] := algebra.projection(C_106:bat[:oid], X_92:bat[:int]); |
|     C_76:bat[:oid] := sql.tid(X_4:int, "formation":str, "salesorderdetails" |
: :str, 3:int, 4:int);                                                        :
|     X_80:bat[:int] := sql.bind(X_4:int, "formation":str, "salesorderdetails |
: ":str, "salesorderdetailid":str, 0:int, 3:int, 4:int);                      :
|     X_93:bat[:int] := algebra.projection(C_76:bat[:oid], X_80:bat[:int]);   |
|     (X_109:bat[:oid], C_110:bat[:oid], X_111:bat[:lng]) := group.groupdone( |
: X_93:bat[:int]);                                                            :
|     X_112:bat[:int] := algebra.projection(C_110:bat[:oid], X_93:bat[:int]); |
|     X_127:bat[:int] := mat.packIncrement(X_100:bat[:int], 4:int);           |
|     X_129:bat[:int] := mat.packIncrement(X_127:bat[:int], X_104:bat[:int]); |
|     X_130:bat[:int] := mat.packIncrement(X_129:bat[:int], X_108:bat[:int]); |
|     X_17:bat[:int] := mat.packIncrement(X_130:bat[:int], X_112:bat[:int]);  |
|     (X_18:bat[:oid], C_19:bat[:oid], X_113:bat[:lng]) := group.groupdone(X_ |
: 17:bat[:int]);                                                              :
|     X_21:bat[:int] := algebra.projection(C_19:bat[:oid], X_17:bat[:int]);   |
|     X_22:lng := aggr.count(X_21:bat[:int], true:bit);                       |
|     language.pass(X_90:bat[:int]);                                          |
|     language.pass(X_91:bat[:int]);                                          |
|     language.pass(X_92:bat[:int]);                                          |
|     language.pass(X_93:bat[:int]);                                          |
|     language.pass(X_17:bat[:int]);                                          |
| exit X_133:bit;                                                             |
|     sql.resultSet("formation.L3":str, "L3":str, "bigint":str, 64:int, 0:int |
: , 7:int, X_22:lng);                                                         :
| end user.s10_1;                                                             |
| #inline               actions= 0 time=1 usec                                |
| #remap                actions= 0 time=2 usec                                |
| #costmodel            actions= 1 time=1 usec                                |
| #coercion             actions= 0 time=160 usec                              |
| #evaluate             actions= 0 time=14 usec                               |
| #emptybind            actions= 1 time=57 usec                               |
| #pushselect           actions= 0 time=4 usec                                |
| #aliases              actions= 1 time=5 usec                                |
| #mitosis              actions=1 time=2237 usec                              |
| #mergetable           actions= 2 time=845 usec                              |
| #deadcode             actions=11 time=13 usec                               |
| #aliases              actions= 0 time=0 usec                                |
| #constants            actions= 3 time=174 usec                              |
| #commonTerms          actions= 5 time=26 usec                               |
| #projectionpath       actions= 0 time=14 usec                               |
| #deadcode             actions= 5 time=6 usec                                |
| #reorder              actions= 1 time=86 usec                               |
| #matpack              actions= 1 time=636 usec                              |
| #dataflow             actions= 1 time=37 usec                               |
| #multiplex            actions= 0 time=1 usec                                |
| #profiler             actions=1 time=1 usec                                 |
| #candidates           actions=1 time=0 usec                                 |
| #deadcode             actions= 0 time=32 usec                               |
| #wlc                  actions= 0 time=2 usec                                |
| #garbagecollector     actions= 1 time=112 usec                              |
| #total                actions=28 time=6334 usec                             |
+-----------------------------------------------------------------------------+

0 个答案:

没有答案