index在logging什么?
比较疑惑,create index 时默认设置logging,不明白索引需要logging些什么?
我想只要表logging了,索引有定义,就可以恢复么,干吗还要再logging呢?
如果index是logging的,那它的log又是怎么记录的呢?
更奇怪下面的一次测试:
SQL> create table test1 as select * from dba_objects where 1<>1;
Table created
SQL> create index INX_1 on test1 (object_id);
Index created
SQL> insert into test1 select * from dba_objects;
已创建30811行。
Execution Plan
----------------------------------------------------------
0 INSERT STATEMENT Optimizer=CHOOSE
1 0 VIEW OF 'DBA_OBJECTS'
2 1 UNION-ALL
3 2 FILTER
4 3 TABLE ACCESS (BY INDEX ROWID) OF 'OBJ$'
5 4 NESTED LOOPS
6 5 TABLE ACCESS (FULL) OF 'USER$'
7 5 INDEX (RANGE SCAN) OF 'I_OBJ2' (UNIQUE)
8 3 TABLE ACCESS (BY INDEX ROWID) OF 'IND$'
9 8 INDEX (UNIQUE SCAN) OF 'I_IND1' (UNIQUE)
10 2 TABLE ACCESS (BY INDEX ROWID) OF 'LINK$'
11 10 NESTED LOOPS
12 11 TABLE ACCESS (FULL) OF 'USER$'
13 11 INDEX (RANGE SCAN) OF 'I_LINK1' (NON-UNIQUE)
Statistics
----------------------------------------------------------
616 recursive calls
37587 db block gets
25032 consistent gets
5 physical reads
8635516 redo size
622 bytes sent via SQL*Net to client
543 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
30811 rows processed
SQL> truncate table test1;
表已截掉。
SQL> alter index x_id nologging;
索引已更改。
SQL> insert into test1 select * from dba_objects;
已创建30811行。
Execution Plan
----------------------------------------------------------
0 INSERT STATEMENT Optimizer=CHOOSE
1 0 VIEW OF 'DBA_OBJECTS'
2 1 UNION-ALL
3 2 FILTER
4 3 TABLE ACCESS (BY INDEX ROWID) OF 'OBJ$'
5 4 NESTED LOOPS
6 5 TABLE ACCESS (FULL) OF 'USER$'
7 5 INDEX (RANGE SCAN) OF 'I_OBJ2' (UNIQUE)
8 3 TABLE ACCESS (BY INDEX ROWID) OF 'IND$'
9 8 INDEX (UNIQUE SCAN) OF 'I_IND1' (UNIQUE)
10 2 TABLE ACCESS (BY INDEX ROWID) OF 'LINK$'
11 10 NESTED LOOPS
12 11 TABLE ACCESS (FULL) OF 'USER$'
13 11 INDEX (RANGE SCAN) OF 'I_LINK1' (NON-UNIQUE)
Statistics
----------------------------------------------------------
817 recursive calls
37634 db block gets
25068 consistent gets
5 physical reads
8654080 redo size
622 bytes sent via SQL*Net to client
543 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
8 sorts (memory)
0 sorts (disk)
30811 rows processed
怎么index在nologging时的redo(logging:8635516 ; nologging:8654080)反而更多呢?
请兄弟们指教,谢谢。