技术开发 频道

理解 DB2 中的列组统计信息

DB2 SQL 优化器同样尝试检测两个表中的多个等式连接谓词间的统计相关性。

示例 2:考虑示例 1 中描述的 SHOW_LISTINGS 表,另外,RATINGS 表包含如下列:


表 2. RATINGS 表的描述

 

列名 描述
SHOW_ID 表外键,包含关于各演出清单的信息
CHANNEL_ID 表外键,包含关于播放演出的每个频道的信息
STATION_ID 表外键,包含和频道相关的每个电视台的信息
CITY_ID 表外键,包含关于上演该演出的每个城市的信息
DAY 播放演出的日期
TIME 播放演出的时间
RATING 在一天的某个时间,在特定城市中,某个电视台频道的演出清单的收视率

RATINGS 表包含描述不同城市演出清单的收视率信息,用户可能需要查询 RATINGS 表和 SHOW_LISTINGS 表的连接以检索这两个表的属性。一个查询在该连接上应用的谓词集包含以下内容:

P1: SHOW_LISTINGS.SHOW_ID = RATINGS.SHOW_ID
            P2: SHOW_LISTINGS.CHANNEL_ID = RATINGS.CHANNEL_ID
            P3: SHOW_LISTINGS.STATION_ID = RATINGS.STATION_ID
            

P1-P3 这三个谓词可能不是互相独立的;优化器试图使用任何可用的多列统计信息来检测谓词之间的相关性。

优化器只能检测和说明每一对连接表上的多个连接谓词间的统计相关性。例如,如果一条 SQL 语句包含如下谓词:

P1: T1.A = T2.A
            P2: T1.B = T2.B
            P3: T1.C = T3.C
            

优化器只尝试检测 P1 和 P2 间的统计相关性,因为它们只应用于相同的两个表的连接,T1 和 T2。P3 应用于 T1 和 T2 的连接;那是一个不同的连接。如果添加了第四个谓词,例如:

P4: T1.D = T2.D
            

优化器将进一步尝试检测 P3 和 P4 间的统计相关性。

为了说明等式连接谓词间的统计相关性,优化器使用连接所涉及的两表之一的多列统计信息;这个表被视为连接的父表。因此只需要在连接的父表中收集列组统计信息。连接的另一个表被指定为子表。如果父表不能确定,那么优化器就不能使用多列统计信息来检测连接谓词间的统计相关性。

附录 B提供了优化器如何确定两个连接表中的父表和子表的具体示例和描述。对连接中的父表进行标识,或者判断连接中是否有父表,这对于避免收集无用的列组统计信息是非常有用的。如果尚无合适的索引可用,那么在连接中的每个表上收集列组统计信息即可。

0
相关文章