Você está na página 1de 6

Utilizando Hints no

Oracle
Veja neste artigo algumas das hints
mais utilizadas.

1 3

Go stei (8) (0)

Olá pessoal,

O Oracle oferece hints(sugestões) que você pode


especificar em uma determinada consulta para tentar
conseguir melhorar o desempenho. Hints são utilizadas
para influenciar o otimizador baseado em custo para
controlar os métodos de acesso e condições de junções etc.

Segue abaixo a lista das hints mais usadas:

- first_rows: Para forçar o uso de índice de modo geral. Faz


com que o otimizador escolha um caminho que apanha a 1º
linha ou N linhas mais rapidamente.

SQL> select /*+ first_rows (100) */ coluna_1, coluna_2



from nome_tabela;

- all_rows: Para forçar um scan complete na tabela.

SQL> select /*+ all_rows (100) */ coluna_1, coluna_2 …

from nome_tabela;

- full: Para forçar um scan completo na tabela. O custo da


leitura do índice e das linhas pode ser maior do que
simplesmente ler a tabela inteira. A hint full também pode
causar resultados inesperados como scan na tabela em
ordem diferente da ordem de acesso.

SQL> select /*+ full_rows (emp) */ coluna_1, coluna_2

from emp

where col_1 = 1 ;

- index: Para forçar o uso de um índice.

SQL> select /*+ index */ emp_no, emp_name, depto_no

from emp

where depto = 1 and empno = 7750 ;

* No exemplo acima, nenhum índice é especificado. O Oracle


pesa todos os índices possíveis e escolhe um ou mais a
serem usados. Como escolhemos a hint index, o otimizador
não fará um scan completo na tabela.
Exemplo do uso da hint index informando os índices que
devem ser utilizados:

SQL> select /*+ index (emp depto_no_idx) */ emp_no,


emp_name, depto_no

from emp

where depto = 1 ;

- no_index: É utilizado para evita que um índice


especificado seja usado.

SQL> select /*+ no_index (nome_tabela indice_1,


indice_2,...) */ coluna_1

from nome_tabela ;

- index_join : Permite mesclar índice em uma única tabela.


Permite acessar somente os índices da tabela, e não
apenas um scan com menos bloco no total, é mais rápido
do que usar um índice que faz scan na tabela por rowid.

Na consulta abaixo, o otimizador juntará os índices


regiao_idx e codigo_idx e não terá de acessar a tabela
tabela_1.

SQL> select /*+ index_join (tabela_1 regiao_idx,


codigo_idx) */ regiao, codigo

from tabela_1

where regiao = 'Sul ' and codigo = 2 ;

- and_equal : Para acessar todos os índices que você


especificar. A hint and_equal faz com que o otimizador
misture vários índices para uma única tabela em vez de
escolher qual é ao melhor.

SQL> select /*+ and_equal (tabela_1 depto_no_idx,


emp_no_idx) */ emp_no, emp_name

from emp

where depto_no = 1 and emp_no = 7750 ;

- index_combine: É utilizado para acessar diversos índices


do tipo bitmap. Faz com que o otimizador misture vários
índices bitmap para uma única tabela em vez de escolher
qual é a melhor.

SQL> select /*+ index_combine (nome_tabela indice_1,


indice_2) */ coluna_1,coluna_2

from nome_tabela ;

- index_ffs: Força um scan completo do índice. Acessa


apenas o índice, e não apenas a tabela correspondente.
Ele só será usado se todas as informações que a consulta
precisa apanhar estiverem no índice. Essa hint pode
oferecer grandes ganhos de desempenho, especialmente
quando a tabela também possuir um grande numero de
colunas.

SQL> select /*+ index_ffs (emp depto_no_idx)


*/depto_no, emp_no

from emp

where depto_no = 1;

Há muitas hints que você pode usar, e este artigo mostrou


as mais utilizadas. Para maiores detalhes e uma lista
detalhada das hints, você pode ler a Oracle10g Database
Perform ance Tuning Guide (disponível para download no
endereçohttp://www.oracle.com/pls/db102/homepage )

Por hoje é tudo pessoal,

Até o próximo artigo,

André Luiz Gomes Antunes

“Keeping IT Running”

André Antunes
André Luiz Gomes Antunes (ag7andre@yahoo.com.br), é Analista Oracle
na Siemens Business Services e instrutor na WorldSoft Treinamentos
(w w w .w orldsoft.com.br). Possuí as certificações: Oracle Database 10g
Administrator Certified Associate, ITIL e COBIT.

1 3

Go stei (8) (0)

1 COMENTÁRIO

Paulo Henrique
Belo artigo..
Muito Obrigado... me ajudou muito.

att.
[há +1 mês] - Responder

Cursos relacionados

Administração do Firebird/InterBase

C urso de Administração do Microsoft SQL Server

Ferramentas Administrativas do MySQL

PL/SQL Oracle

Administração do Firebird/InterBase

[Ver todos]

Você também pode gostar