WEB开发网
开发学院数据库Oracle Oracle Index 的三个问题 阅读

Oracle Index 的三个问题

 2007-05-08 12:11:25 来源:WEB开发网   
核心提示: 除此之外呢?我们还是来看一个例子吧:在 HP ( Oracle 8.1.7 ) 上执行以下语句:select count(1) from mytabs where coid>=130000 and issuedate >= to_date ('2001-07-20

除此之外呢?我们还是来看一个例子吧:

在 HP ( Oracle 8.1.7 ) 上执行以下语句:

select count(1) from mytabs where coid>=130000 and issuedate >= to_date ('2001-07-20', 'yyyy-mm-dd') 。

一开始,我们有两个单列索引: I_mytabs1(coid), I_mytabs2(issuedate), 下面是执行情况:

COUNT(1)

6427

Execution Plan

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=384 Card=1 Bytes=11)

1 0 SORT (AGGREGATE)

2 1 TABLE ACCESS (BY INDEX ROWID) OF 'T_MYTABS' (Cost=384 Card =126 Bytes=1386)

3 2 INDEX (RANGE SCAN) OF 'I_MYTABS2' (NON-UNIQUE) (Cost=11 Card=126)

Statistics

172 recursive calls

1 db block gets

5054 consistent gets

2206 physical reads

0 redo size

293 bytes sent via SQL*Net to client

359 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

5 sorts (memory)

0 sorts (disk)

1 rows processed

可以看到,它读取了 7000 个数据块来获得所查询的 6000 多行。

现在,去掉这两个单列索引,增加一个复合索引 I_mytabs_test ( coid, issuedate), 重新执行,结果如下:

COUNT(1)

6436

Execution Plan

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=1 Bytes=11)

1 0 SORT (AGGREGATE)

2 1 INDEX (RANGE SCAN) OF 'I_MYTABS_TEST' (NON-UNIQUE) (Cost=3 Card=126 Bytes=1386)

Statistics

806 recursive calls

上一页  1 2 3 4 5  下一页

Tags:Oracle Index 三个

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接