WEB开发网
开发学院数据库DB2 DB2 最佳实践: 编写并调优查询语句以优化性能最佳... 阅读

DB2 最佳实践: 编写并调优查询语句以优化性能最佳实践

 2009-11-12 00:00:00 来源:WEB开发网   
核心提示: 如果你不能避免多个 DISTINCT 集合的话,就考虑使用带 ENHANCED_MUTIPLE_DISTINCT 选项的 DB2_EXTENDED_OPTIMIZATION 注册表变量,DB2 最佳实践: 编写并调优查询语句以优化性能最佳实践(7), 这个选项将使到多个 DISTICT 集合的输

如果你不能避免多个 DISTINCT 集合的话,就考虑使用带 ENHANCED_MUTIPLE_DISTINCT 选项的 DB2_EXTENDED_OPTIMIZATION 注册表变量。 这个选项将使到多个 DISTICT 集合的输入流被读取一次然后被 UNION 的每一个分支重复使用。这个选项可以在数据库分区的处理器比率较低的时(例如,比率小于或等于 1)提高这类查询的性能。这个设置应该对没有对称的多处理器的 DPF(Database Partitioning Feature)环境(SMPs)很有用。这个优化扩展不能在所有环境中提高查询性能。应该进行测试来判断单个查询性能的提高。

避免多余的谓词

某些查询的语义需要外连接(不管左、右或全连接)。然而,如果查询语义不需要一个外连接并被用于处理不一致数据,那么最好是处理不一致数据的根本原因。例如,在一个数据集市中有一个星型模式,事实表可能包含事务数据,不过因为数据不一致的问题,造成与父维度行的一些维度不匹配。这是可能发生的,因为抽取、转换和装载(ETL)过程出于某些原因不与商业键不兼容。在这种情况下,事实表的行与维度左连接可以确保它们即使在没有父表的情况下得到返回。例如:

SELECT ... FROM DAILY_SALES F 
 LEFT OUTER JOIN CUSTOMER C ON F.CUST_KEY = C.CUST_KEY 
 LEFT OUTER JOIN STORE S ON F.STORE_KEY = S.STORE_KEY 
 WHERE 
 C.CUST_NAME = 'SMITH'

左外连接会阻止一些优化,也包括使用指定的星型模式连接访问方法。然而,在某些情况下左外连接可以自动被查询优化器重写成一个内部连接。在这个例子中,在 CUSTOMER 和 DAILY_SALES 之间的左外连接可以被转换成一个内部连接,因为 C.CUST_NAME= ’ SMITH ’谓词将排除这一列中所有 NULL 值的行,使得一个左外连接语义变得没有必要。所以由于外连接的出现导致那些优化损失可能并不会对所有查询产生负面影响。然而,注意到这些限制并避免外连接非常重要,除非它们是绝对必须的。

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:DB 最佳 实践

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接