分区列上的绑定变量与排序的一点关系
大量的排序操作会占用大量的CPU资源, 即便是内存中的排序. 通常我们可以用索引来 避免排, 但在分区表上, 就有些区别了. 下面是我做的一个测试例子, 你会知道在分区列上使用绑定变量 时会引起不必要的排序. 虽然在这个例子中用不用绑定变量都很明显地只访问一个分区, 但是Oracle还是 在用绑定变量时进行了不必要的排序. 因此Oracle有时是笨得可爱.
请使用下面的角本来创建测试表:
CREATE TABLE TEST_SORT
(
COL1 NUMBER,
COL2 NUMBER,
pkey number,
col3 varchar2(30)
)
partition by range(pkey)
(
partition p0 values less than (1),
partition p1 values less than (2),
partition p2 values less than (3)
) tablespace data02;
INSERT INTO TEST_SORT
SELECT ROWNUM, MOD(ROWNUM,100), mod(rownum,3), OBJECT_NAME
FROM DBA_OBJECTS WHERE ROWNUM < 5001;
commit;
CREATE INDEX IDX_TEST_SORT ON (COL1,COL2,PKEY) LOCAL;
