Tabela Dual – O que é isso?
Olá Pessoal,
Vou falar um pouco sobre a tabela dual, para que ela serve e como ela vem otimizada na versão 10g.
A tabela Dual é muito utilizada pelos desenvolvedores, DBAs e pela própria Oracle para fazer operações com select aonde não é necessário fazer extração de dados em tabelas. Basicamente ela ajuda a manter a sintaxe correta de um select aonde não teremos uma tabela na consulta.
Observem a consulta abaixo executada no 9i
SQL> SELECT SYSDATE
2 FROM dual;
1 row selected.
Execution Plan
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=5 Card=8168)
1 0 TABLE ACCESS (FULL) OF 'DUAL' (Cost=5 Card=8168)
Statistics
1 recursive calls
0 db block gets
3 consistent gets
0 physical reads
0 redo size
194 bytes sent via SQLNet to client
341 bytes received via SQLNet from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
Agora vamos executar a mesma consulta no 10g
SQL> set autotrace traceonly
SQL> SELECT SYSDATE
2 FROM dual;
1 row selected.
Execution Plan
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=2 Card=1)
1 0 FAST DUAL (Cost=2 Card=1)
Statistics
1 recursive calls
0 db block gets
0 consistent gets
0 physical reads
0 redo size
203 bytes sent via SQLNet to client
342 bytes received via SQLNet from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
Na consulta efetuada no 9i vemos um “access Full” na tabela dual, e nas estastisticas aparecem 3 “consistent gets” do qual os dba´s tentam se livrar utilizanos várias técnicas que agora com a versão 10g se tornaram dispensáveis. Na consulta realizada no 10g não há “consistent gets” e o custo é mais baixo.