|
|
最初由 biti_rainy 发布
[B]
FFS和FTS是一样的,所以这样出来的数据也并不是有序的。只是索引比表小,快一些而已。
如果你创建一个一两个数字字段的表,走FFS,反而比FTS慢了,因为索引比表还大 [/B]
昏了,应该是如果在字段有not null约束的话.可以使用ffs.
如果字段较小的话,比较ffs/fts的统计信息,确实ffs的效率比fts的效率还要低.
SQL>
SQL> drop table t1
2 /
表已丢弃。
已用时间: 00: 00: 00.02
SQL> create table t1 (n1 varchar2(10))
2 /
表已创建。
已用时间: 00: 00: 00.00
SQL> declare
2 begin
3 for i in 1..100000 loop
4 insert into t1 values(to_char(i));
5 end loop;
6 commit;
7 end;
8 /
PL/SQL 过程已成功完成。
已用时间: 00: 00: 05.06
SQL>
SQL> create index idx_t1_1 on t1(n1)
2 /
索引已创建。
已用时间: 00: 00: 00.06
SQL> analyze table t1 compute statistics for table for all indexes
2 /
表已分析。
已用时间: 00: 00: 01.03
SQL>
SQL> drop table t2
2 /
表已丢弃。
已用时间: 00: 00: 00.05
SQL> create table t2 (c1 varchar2(10),c2 char(10),c3 char(10),c4 char(10),c5 char(10),c6 char(10))
2 /
表已创建。
已用时间: 00: 00: 00.00
SQL> declare
2 begin
3 for i in 1..100000 loop
4 insert into t2 values(to_char(i),'test','test','test','test','test');
5 end loop;
6 commit;
7 end;
8 /
PL/SQL 过程已成功完成。
已用时间: 00: 00: 07.02
SQL> create index idx_t2_1 on t2(c1)
2 /
索引已创建。
已用时间: 00: 00: 00.07
SQL> analyze table t2 compute statistics for table for all indexes
2 /
表已分析。
已用时间: 00: 00: 01.03
SQL>
SQL> set autotrace traceonly
SQL> set timing on
SQL>
SQL> select count(*) from t1
2 /
已用时间: 00: 00: 01.03
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=16 Card=1)
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (FULL) OF 'T1' (Cost=16 Card=100000)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
156 consistent gets
0 physical reads
0 redo size
208 bytes sent via SQL*Net to client
275 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> select /*+index_ffs(t1)*/ count(*) from t1
2 /
已用时间: 00: 00: 01.03
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=16 Card=1)
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (FULL) OF 'T1' (Cost=16 Card=100000)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
156 consistent gets
0 physical reads
0 redo size
209 bytes sent via SQL*Net to client
275 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> select count(*) from t2
2 /
已用时间: 00: 00: 01.03
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=89 Card=1)
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (FULL) OF 'T2' (Cost=89 Card=100000)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
915 consistent gets
0 physical reads
0 redo size
209 bytes sent via SQL*Net to client
275 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> select /*+index_ffs(t2 idx_t2_1)*/ count(*) from t2
2 /
已用时间: 00: 00: 01.03
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=89 Card=1)
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (FULL) OF 'T2' (Cost=89 Card=100000)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
915 consistent gets
0 physical reads
0 redo size
209 bytes sent via SQL*Net to client
275 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL>
SQL> drop index idx_t1_1
2 /
索引已丢弃。
已用时间: 00: 00: 00.01
SQL> alter table t1 add constraint pk_t1 primary key(n1)
2 /
表已更改。
已用时间: 00: 00: 00.07
SQL> analyze table t1 compute statistics for table for all indexes
2 /
表已分析。
已用时间: 00: 00: 01.02
SQL> drop index idx_t2_1
2 /
索引已丢弃。
已用时间: 00: 00: 00.01
SQL> alter table t2 add constraint pk_t2 primary key(c1)
2 /
表已更改。
已用时间: 00: 00: 00.07
SQL> analyze table t2 compute statistics for table for all indexes
2 /
表已分析。
已用时间: 00: 00: 01.03
SQL>
SQL> select /*+index_ffs(t1)*/ count(*) from t1
2 /
已用时间: 00: 00: 01.03
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=23 Card=1)
1 0 SORT (AGGREGATE)
2 1 INDEX (FAST FULL SCAN) OF 'PK_T1' (UNIQUE) (Cost=23 Card
=100000)
Statistics
----------------------------------------------------------
39 recursive calls
0 db block gets
238 consistent gets
0 physical reads
0 redo size
208 bytes sent via SQL*Net to client
275 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> select /*+full(t1)*/ count(*) from t1
2 /
已用时间: 00: 00: 01.03
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=16 Card=1)
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (FULL) OF 'T1' (Cost=16 Card=100000)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
156 consistent gets
0 physical reads
0 redo size
209 bytes sent via SQL*Net to client
275 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> select /*+index_ffs(t2)*/count(*) from t2
2 /
已用时间: 00: 00: 01.03
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=23 Card=1)
1 0 SORT (AGGREGATE)
2 1 INDEX (FAST FULL SCAN) OF 'PK_T2' (UNIQUE) (Cost=23 Card
=100000)
Statistics
----------------------------------------------------------
39 recursive calls
0 db block gets
237 consistent gets
0 physical reads
0 redo size
209 bytes sent via SQL*Net to client
275 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> select /*+full(t2)*/ count(*) from t2
2 /
已用时间: 00: 00: 01.03
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=89 Card=1)
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (FULL) OF 'T2' (Cost=89 Card=100000)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
915 consistent gets
0 physical reads
0 redo size
209 bytes sent via SQL*Net to client
275 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL>
SQL> spool off |
|