Not that I'm aware of. as far as anyone is concerned (application wise), it doesn't really matter if it was fast added or not.
In 11gR2 you can assume that any column added with a DEFAULT that is not null is "fast added"
In 12cR1, you can assume that any column added with a DEFAULT is "fast added":
ops$tkyte%ORA12CR1> create table t ( x int );
Table created.
ops$tkyte%ORA12CR1>
ops$tkyte%ORA12CR1> insert into t values ( 0 );
1 row created.
ops$tkyte%ORA12CR1> commit;
Commit complete.
ops$tkyte%ORA12CR1>
ops$tkyte%ORA12CR1> alter table t add a number default 0 not null;
Table altered.
ops$tkyte%ORA12CR1> alter table t add b number default 1;
Table altered.
ops$tkyte%ORA12CR1>
ops$tkyte%ORA12CR1> select /*+ gather_plan_statistics */ * from t where a = 1;
no rows selected
ops$tkyte%ORA12CR1> select * from table( dbms_xplan.display_cursor( null,null, 'ALLSTATS LAST'));
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID cuc6cqxwxrtvj, child number 0
-------------------------------------
select /*+ gather_plan_statistics */ * from t where a = 1
Plan hash value: 1601196873
------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 0 |00:00:00.01 | 7 |
|* 1 | TABLE ACCESS FULL| T | 1 | 1 | 0 |00:00:00.01 | 7 |
------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter(NVL("A",0)=1)
Note
-----
- dynamic sampling used for this statement (level=2)
22 rows selected.
ops$tkyte%ORA12CR1>
ops$tkyte%ORA12CR1> select /*+ gather_plan_statistics */ * from t where b = 1;
X A B
---------- ---------- ----------
0 0 1
ops$tkyte%ORA12CR1> select * from table( dbms_xplan.display_cursor( null,null, 'ALLSTATS LAST'));
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID 3n6zhg0grhqyx, child number 0
-------------------------------------
select /*+ gather_plan_statistics */ * from t where b = 1
Plan hash value: 1601196873
------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.01 | 7 |
|* 1 | TABLE ACCESS FULL| T | 1 | 1 | 1 |00:00:00.01 | 7 |
------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter(DECODE(TO_CHAR(SYS_OP_VECBIT("SYS_NC00003$",0)),NULL,NVL("B",1
),'0',NVL("B",1),'1',"B")=1)
Note
-----
- dynamic sampling used for this statement (level=2)
23 rows selected.
but again, it isn't like you have to code to this - you just index A or B and we'll use it when appropriate...
ops$tkyte%ORA12CR1> create index t_idx1 on t(a);
Index created.
ops$tkyte%ORA12CR1> create index t_idx2 on t(b);
Index created.
ops$tkyte%ORA12CR1>
ops$tkyte%ORA12CR1> select /*+ gather_plan_statistics */ * from t where a = 1;
no rows selected
ops$tkyte%ORA12CR1> select * from table( dbms_xplan.display_cursor( null,null, 'ALLSTATS LAST'));
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID cuc6cqxwxrtvj, child number 0
-------------------------------------
select /*+ gather_plan_statistics */ * from t where a = 1
Plan hash value: 206624438
--------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
--------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 0 |00:00:00.01 | 1 |
| 1 | TABLE ACCESS BY INDEX ROWID BATCHED| T | 1 | 1 | 0 |00:00:00.01 | 1 |
|* 2 | INDEX RANGE SCAN | T_IDX1 | 1 | 1 | 0 |00:00:00.01 | 1 |
--------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("A"=1)
Note
-----
- dynamic sampling used for this statement (level=2)
23 rows selected.
ops$tkyte%ORA12CR1>
ops$tkyte%ORA12CR1> select /*+ gather_plan_statistics */ * from t where b = 1;
X A B
---------- ---------- ----------
0 0 1
ops$tkyte%ORA12CR1> select * from table( dbms_xplan.display_cursor( null,null, 'ALLSTATS LAST'));
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID 3n6zhg0grhqyx, child number 0
-------------------------------------
select /*+ gather_plan_statistics */ * from t where b = 1
Plan hash value: 369893979
--------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
--------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.01 | 2 |
| 1 | TABLE ACCESS BY INDEX ROWID BATCHED| T | 1 | 1 | 1 |00:00:00.01 | 2 |
|* 2 | INDEX RANGE SCAN | T_IDX2 | 1 | 1 | 1 |00:00:00.01 | 1 |
--------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("B"=1)
Note
-----
- dynamic sampling used for this statement (level=2)
23 rows selected.