Индексы на nested table

Журавлев Денис
Дата: 06.12.2007 09:31:50
Есть базовый объект например Tmyobject
И таблица mytable of Tmyobject
Наследую другой объект Tsecondobject under Tmyobject
У него один из атрибутов nested table , для хранения данных которой оракл создал табличку с названием SYSNT*****
План запроса к таблице mytable показывает full scan на SYSNT*****

Как узнать есть ли индексы на таблицу SYSNT***** по nested_table_id ? Табличка SYSNT***** в all_tables не присутствует. Если оно автоматом не индексируется как проиндексировать (имена-то генерятся ораклом)?

TABLE ACCESS FULL Object name=SYSNTpuVztE1lRauQwbfcANACRA== Cost=3 Cardinality=1 Bytes=36 Filter predicates="SYSNTpuVztE1lRauQwbfcANACRA=="."NESTED_TABLE_ID"=:B1

TABLE ACCESS FULL Object name=SYSNT4vJasXXXQXqDNbyjWfkc5A== Cost=3 Cardinality=1 Bytes=14 Filter predicates="SYSNT4vJasXXXQXqDNbyjWfkc5A=="."NESTED_TABLE_ID"=:B1

TABLE ACCESS FULL Object name=SYSNTPXDM+1eHTS62Jo2GhEcr6w== Cost=3 Cardinality=1 Bytes=36 Filter predicates="SYSNTPXDM+1eHTS62Jo2GhEcr6w=="."NESTED_TABLE_ID"=:B1

TABLE ACCESS FULL Object name=SYSNTYwSAtUuRR5e+lfD9AUXi2g== Cost=3 Cardinality=1 Bytes=115 Filter predicates="SYSNTYwSAtUuRR5e+lfD9AUXi2g=="."NESTED_TABLE_ID"=:B1

TABLE ACCESS FULL Object name=SYSNTpuVztE1lRauQwbfcANACRA== Cost=3 Cardinality=1 Bytes=36 Filter predicates="SYSNTpuVztE1lRauQwbfcANACRA=="."NESTED_TABLE_ID"=:B1

TABLE ACCESS FULL Object name=SYSNT4vJasXXXQXqDNbyjWfkc5A== Cost=3 Cardinality=1 Bytes=14 Filter predicates="SYSNT4vJasXXXQXqDNbyjWfkc5A=="."NESTED_TABLE_ID"=:B1

TABLE ACCESS FULL Object name=SYSNTPXDM+1eHTS62Jo2GhEcr6w== Cost=3 Cardinality=1 Bytes=36 Filter predicates="SYSNTPXDM+1eHTS62Jo2GhEcr6w=="."NESTED_TABLE_ID"=:B1
Змей Равниныч
Дата: 06.12.2007 09:51:32
Журавлев Денис
У него один из атрибутов nested table
За такие вещи надо убивать на месте...
Splain
Дата: 06.12.2007 15:50:19
Не совсем nested table.

SQL> create or replace type TCustomTaxRate as object(
  2    tr_id              number(12)
  3    ) not final not instantiable;
  4  /

Type created.

SQL> 
SQL> create table dat_tax_rates of TCustomTaxRate
  2  ;

Table created.

SQL> 
SQL> create or replace type TCashlessServiceTaxItem is object(
  2    ord_num            integer         /* порядковый номер */
  3    );
  4  /

Type created.

SQL> 
SQL> create or replace type TCashlessServiceTaxes is table of TCashlessServiceTaxItem;
  2  /

Type created.

SQL> 
SQL> create or replace type TCashlessServiceTax under TCustomTaxRate(
  2    tax_list           TCashlessServiceTaxes
  3    )
  4    not final instantiable;
  5  /

Type created.

SQL> 
SQL> explain plan for select value(p) from dat_tax_rates p;

Explained.

SQL> 
SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT                                                               
--------------------------------------------------------------------------------
| Id  | Operation            |  Name                          | Rows  | Bytes | Cost  |                                                                         
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |                                |       |       | 
|* 1  |  TABLE ACCESS FULL  | SYSNTAJmOajqQTHaBrlyMveIfCg==  |       |       | 
|   2 |  TABLE ACCESS FULL  | DAT_TAX_RATES                  |       |       | 

Predicate Information (identified by operation id):                             
---------------------------------------------------                             
                                                                                
   1 - filter("SYSNTAJmOajqQTHaBrlyMveIfCg=="."NESTED_TABLE_ID"=:B1)            
                                                                                
Note: rule based optimization                                                   

15 rows selected.

SQL> 
SQL> drop table dat_tax_rates;

Table dropped.

SQL> 
SQL> drop type TCashlessServiceTax;

Type dropped.

SQL> 
SQL> drop type TCashlessServiceTaxes;

Type dropped.

SQL> 
SQL> drop type TCashlessServiceTaxItem;

Type dropped.

SQL> 
SQL> drop type TCustomTaxRate;

Type dropped.


Вобщем, вопрос - каков механизм реализации операции value и как избежать table access full на создаваемой ораклом NT?
Splain
Дата: 07.12.2007 15:39:45
Задали вопрос в техподдержку.

РД-ТЕХ, как всегда, на высоте.

Надо просто не бояться создать индекс по полю nested_table_id самостоятельно.

CREATE INDEX taxes_ind ON "SYSNTAJmOajqQTHaBrlyMveIfCg==" (nested_table_id);
Змей Равниныч
Дата: 07.12.2007 15:48:23
Splain
Задали вопрос в техподдержку.

РД-ТЕХ, как всегда, на высоте.

Надо просто не бояться создать индекс по полю nested_table_id самостоятельно.
Для начала надо попробовать не создавать NESTED TABLES :)

P.S. РДТЕХ пишется слитно :)