购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.去除在谓词列上编写的任何标量函数

肯定有办法重写谓词,使得谓词列上不再使用函数。要记住:在SQL语句的Select部分对列编写标量函数是完全可以的,不过如果在Where部分中对列使用函数,就会自动将谓词变成不可索引的谓词,并成为一个Stage 2谓词。例如:


SELECT EMPNO, LASTNAME

FROM EMP

WHERE YEAR(HIREDATE)=2005


应当写为:


SELECT EMPNO, LASTNAME

FROM EMP

WHERE HIREDATE BETWEEN'2005-01-01'and'2005-12-31'


如上所示重写这个语句之后,DB2可以选择使用列HIREDATE上的索引(如果存在这样一个索引)。但是如果在谓词中使用了YEAR函数,DB2就无法使用该列的索引了。

DB2 V9中,在列上创建索引时可以使用函数。V9称之为表达式索引(Index on Expression)。用函数和/或表达式创建这种表达式索引时,DB2会查看索引,如果它与SQL语句中的具体SQL函数和/或表达式匹配,就会使用这个索引。需要注意,即便如此,仍然要尽可能像上面那样重新编写查询。维护更多的索引可能成本很高,因为这样一来DBA需要管理的索引也会更多,而且它们会增加插入、删除和一些更新的成本。例如:


CREATE INDEX XEMP4 ON

EMP(YEAR(HIREDATE))

USING STOGROUP……

PRIQTY……SECQTY…… SCw3xgd2+UP4ERrxFufPMuYm2aCDmNFybibxvaHb29JQ+dRulvVuLh3GtkDMc5sn


点击中间区域
呼出菜单
上一章
目录
下一章
×