DB2性能調(diào)優(yōu)之使用約束來提高查詢優(yōu)化
在這里我們主要向大家介紹的是DB2性能調(diào)優(yōu):設(shè)計并且配置你的數(shù)據(jù)庫方案之使用約束來提高查詢優(yōu)化,我們大家都知道有很多數(shù)據(jù)庫設(shè)計與配置選項可以影響查詢性能。對數(shù)據(jù)庫設(shè)計的更多建議參考“ Planning your Physical Database Design ”***實踐文章。
DB2性能調(diào)優(yōu):設(shè)計并配置你的數(shù)據(jù)庫之使用約束來提高查詢優(yōu)化
考慮定義的唯一性,檢查并參考一致性約束。這些約束提供了語義信息,允許 DB2 優(yōu)化器重寫查詢來評估連接,通過連接來降低聚合和 FETCH FIRST N ROWS,去掉不必要的 DISTINCT 選項被和一些其它的優(yōu)化。當(dāng)應(yīng)用程序可以保證它自己的關(guān)系時,信息約束也可以被用來檢查并參考一致性約束。相同的優(yōu)化也是可以的。
當(dāng)更新(插入或刪除)行的時候,來自數(shù)據(jù)庫管理器的強制約束可能導(dǎo)致很高的系統(tǒng)開銷,尤其在更新很多有一致性約束的行的時候。如果一個應(yīng)用程序在更新一行之前已經(jīng)驗證的信息,這樣使用信息約束比起正常的約束更有效
例如,考慮 2 個表 DAILY_SALES 和 CUSTOMER 。在 CUSTOMER 表中的每一行都有一個唯一的客戶鍵值(CUST_KEY)。 DAILY_SALES 包含一個 CUST_KEY 列并且每一行都引用一個 CUSTOMER 表中的客戶鍵??梢詣?chuàng)建一個參考一致性約束來防止在 CUSTOMER 和 DAILY_SALES 之間發(fā)生 1:N 的關(guān)系。
如果應(yīng)用程序要強制約束這個關(guān)系,可以創(chuàng)建一個信息化的約束。那么下面的查詢避免了在 CUSTOMER 和 DAILY_SALES 之間進行連接,因為沒有從 CUSTOMER 獲取任何列,而且來自于 DAILY_SALES 的每一行都可以在 CUSTOMER 里面找到與之匹配的行,所以查詢優(yōu)化器將自動刪除連接
- 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
應(yīng)用程序必須執(zhí)行信息約束,否則查詢可能返回不正確的結(jié)果。在上面的例子中,如果行存在于 DAILY_SALES 中,在 CUSTOMER 表中卻找不到相應(yīng)的客戶鍵,那么上面的查詢返回的行可能不正確。
以上的相關(guān)內(nèi)容就是對DB2性能調(diào)優(yōu):設(shè)計并配置你的數(shù)據(jù)庫之使用約束來提高查詢優(yōu)化的介紹,望你能有所收獲。
【編輯推薦】