DB2数据库查询过程(Query Processing)----统计信息与过滤因子(Statistics and Filter Factors)

本文深入探讨DB2数据库查询中的过滤因子(Filter Factor)和统计信息的作用。过滤因子表示满足特定条件的行占比,帮助查询优化器在不同索引间做出选择。通过举例说明了如何计算过滤因子,并介绍了统计信息在数据库监控和优化中的重要性,包括SYSTABLES、SYSCOLUMNS和SYSINDEXS系统编目的关键统计指标。
摘要由CSDN通过智能技术生成

关于统计信息和过滤因子在《DB2数据库查询过程(Query Processing)----概述》一文中已经作了大致介绍。本文再详细讨论一下。

过滤因子(Filter Factor)

过滤因子是一个间接参数,表示满足特定条件的行占表中所有行的比例,,记作FF(P),P表示条件谓词。过滤因子的值可以根据系统编目中的统计信息计算得出,它的主要作用是在存在多种数据访问方式的时候提供选择参考。

考虑下面这张MOBILE表:


现在该表的CITY列上有索引CITY_IDX,MOBILETYPE列上有索引TYPE_IDX。对于SQL查询语句:

Select * From MOBILE Where CITY='武汉' And MOBILETYPE='中国电信 CDMA'

这个查询语句应该使用哪个索引?

由于对于一张表,只能使用一个索引,对一个条件使用索引读入满足条件的数据行后在使用第二个条件进行进一步的筛选。那么查询优化器如何在CITY_IDX和TYPE_IDX这两个索引之间作出取舍呢?

这时候过滤因子就是一个重要的参考参数。

假设MOBILE表总共有100000行,在CITY上一共有100个不同的取值,记作COLCARD(CITY)=100。在MOBILETYPE上一共有10个不同的取值,记作COLCARD(MOBILETYPE)=10.

那么,对于每一个CITY值A,CITY列上值为A的行平均下来大概是100000/100=1000个。即满足CITY='武汉'的行一共有1000个;同理,满足MOBILETYPE='中国电信 CDMA'的行一共有100000/10=10000个。

假设MOBILE表中的所有行都位于不同的数据页上,如果使用CITY_IDX索引,那么需要读入缓冲池的数据页数为1000页,即1000次I/O;而如果使用TYPE_IDX索引,则需要读入缓冲池的数据页数为10000页,即10000次I/O。整整10倍的差距。当然是用CITY_IDX更好了。

也就是说,根据两个条件的CARD值的不同就可以判断出哪种选择更优了,但是使用COLCARD这样一个绝对的量值来作为衡量标准是非常不便的,于是引入过滤因子(Filter Factor)的概念。

过滤因子是满足条件的值在所有值中所占的比例,以上例为例:满足CITY='武汉'的行为1000,表中总的行数为100000.则:

FF(CITY='武汉')=1000/100000=1/100=0.01

同理,FF(MOBILETYPE='中国电信 CDMA')=10000/100000=1/10=0.1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值