DB2 最佳实践: 编写并调优查询语句以优化性能最佳实践
2009-11-12 00:00:00 来源:WEB开发网在描述中避免使用连接谓词
在描述中使用连接谓词把连接方法限制为了嵌套循环。另外,对基数的评估可能不准确。下面是一些连接描述的例子:
WHERE SALES.PRICE * SALES.DISCOUNT = TRANS.FINAL_PRICE
WHERE UPPER(CUST.LASTNAME) = TRANS.NAME
避免对本地谓词有过多的列描述
使用相反的描述来替代应用中的一个在本地谓词上有太多列的描述。考虑下面的例子:
XPRESSN(C) = 'constant'
INTEGER(TRANS_DATE)/100 = 200802
你可把它们语句重写为:
C = INVERSEXPRESSN('constant')
TRANS_DATE BETWEEN 20080201 AND 20080229
应用多列的描述将妨碍索引开始和结束键的使用,从而导致不准确的可选评估,并需要在查询运行时花费额外的时间来处理。这些描述同样会阻止对查询的重写优化,比如在列相等时的识别、使用常量来替换各列并且对只有一行返回的情况进行识别。在这之后的进一步的优化也可能会被阻止,因此会失去更多的优化机会。考虑下面的查询:
SELECT LASTNAME, CUST_ID, CUST_CODE FROM CUST
WHERE (CUST_ID * 100) + INT(CUST_CODE) = 123456 ORDER BY 1,2,3
你也可以用下面的语句:
SELECT LASTNAME, CUST_ID, CUST_CODE FROM CUST
WHERE CUST_ID = 1234 AND CUST_CODE = '56' ORDER BY 1,2,3
如果在 CUST_ID 上有一个唯一索引,重写的查询版本让查询优化器注意到最多一行记录将被返回。这避免了引入一个没有必要的排序操作。这也让 CUST_ID 和 CUST_CODE 列被 1234 和‘ 56 ’替代,从而避免了从数据页或索引页复制数据。最终,使得在 CUST_ID 上的谓词应用成一个索引开始或结束键。
- ››db2 对float类型取char后显示科学计数法
- ››DB2中出现SQL1032N错误现象时的解决办法
- ››DB2 锁升级示例
- ››db2诊断系列之---定位锁等待问题
- ››db2 命令选项解释
- ››最佳ASP.NET编程习惯
- ››DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 基础: 表空间和缓冲池
- ››DB2 XML 编程,第 1 部分: 理解 XML 数据模型
更多精彩
赞助商链接