在这里我们主要向大家介绍的是DB2性能调优:设计并且配置你的数据库方案之使用约束来提高查询优化,我们大家都知道有很多数据库设计与配置选项可以影响查询性能。对数据库设计的更多建议参考“ Planning your Physical Database Design ”***实践文章。
DB2性能调优:设计并配置你的数据库之使用约束来提高查询优化
考虑定义的唯一性,检查并参考一致性约束。这些约束提供了语义信息,允许 DB2 优化器重写查询来评估连接,通过连接来降低聚合和 FETCH FIRST N ROWS,去掉不必要的 DISTINCT 选项被和一些其它的优化。当应用程序可以保证它自己的关系时,信息约束也可以被用来检查并参考一致性约束。相同的优化也是可以的。
当更新(插入或删除)行的时候,来自数据库管理器的强制约束可能导致很高的系统开销,尤其在更新很多有一致性约束的行的时候。如果一个应用程序在更新一行之前已经验证的信息,这样使用信息约束比起正常的约束更有效
例如,考虑 2 个表 DAILY_SALES 和 CUSTOMER 。在 CUSTOMER 表中的每一行都有一个唯一的客户键值(CUST_KEY)。 DAILY_SALES 包含一个 CUST_KEY 列并且每一行都引用一个 CUSTOMER 表中的客户键。可以创建一个参考一致性约束来防止在 CUSTOMER 和 DAILY_SALES 之间发生 1:N 的关系。
如果应用程序要强制约束这个关系,可以创建一个信息化的约束。那么下面的查询避免了在 CUSTOMER 和 DAILY_SALES 之间进行连接,因为没有从 CUSTOMER 获取任何列,而且来自于 DAILY_SALES 的每一行都可以在 CUSTOMER 里面找到与之匹配的行,所以查询优化器将自动删除连接
- SELECT AMT_SOLD, SALE PRICE, PROD_DESC
- FROM DAILY_SALES, PRODUCT, CUSTOMER
- WHERE
- DAILY_SALES.PROD_KEY = PRODUCT.PRODKEY AND
- DAILY_SALES.CUST_KEY = CUSTOMER.CUST_KEY
应用程序必须执行信息约束,否则查询可能返回不正确的结果。在上面的例子中,如果行存在于 DAILY_SALES 中,在 CUSTOMER 表中却找不到相应的客户键,那么上面的查询返回的行可能不正确。
以上的相关内容就是对DB2性能调优:设计并配置你的数据库之使用约束来提高查询优化的介绍,望你能有所收获。
【编辑推荐】