DB2对于BETWEEN谓词的基本估计

时间:2014-01-07 15:03:31

标签: db2

这更像是一个学术问题,因为我对DB2查询优化器的细节很感兴趣。

我有一个包含10000条记录且没有索引的表。 SYSCAT.TABLES中的COLCARD显示10000,名为MesFabricacao的列具有以下COLSTAT:

COLCARD HIGH2KEY    LOW2KEY     TABNAME      COLUMN

198         198         2       CARINFO     MESFABRICACAO

根据核心手册“DB2PerfTuneTroubleshoot-db2d3e1011.pdf”第451页,没有直方图的谓词之间的基数公式为:(( KEY2 - KEY1) / (HIGH2KEY - LOW2KEY)) * CARD

对于给定的查询"SELECT COUNT(*) FROM STATS.CARINFO WHERE MesFabricacao BETWEEN 1 AND 3",使用db2exfmt我看到过滤因子为0.0151258,这个值无法解释QO用于估算的原因。

有没有人解释为什么DB2应用此过滤因子?我正在使用DB2 10.1.0.0。

(db2exfmt的输出)

谓词:

            2) Sargable Predicate,
                    Comparison Operator:            Less Than or Equal (<=)
                    Subquery Input Required:        No
                    Filter Factor:                  0.0151258

                    Predicate Text:
                    --------------
                    (Q1.MESFABRICACAO <= 3)

            3) Sargable Predicate,
                    Comparison Operator:            Less Than or Equal (<=)
                    Subquery Input Required:        No
                    Filter Factor:                  1

                    Predicate Text:
                    --------------
                    (1 <= Q1.MESFABRICACAO)

            Input Streams:
            -------------
                    1) From Object STATS.CARINFO

                            Estimated number of rows:       10000
                            Number of columns:              2
                            Subquery predicate ID:          Not Applicable

                            Column Names:
                            ------------
                            +Q1.$RID$+Q1.MESFABRICACAO

            Output Streams:
            --------------
                    2) To Operator #2

                            Estimated number of rows:       151.258
                            Number of columns:              0

0 个答案:

没有答案