Pesquisas utilizando índices

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
HÉLIO ANDRADE
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Qui, 22 Jun 2006 7:54 pm
Localização: BRASÍLIA - DF

Gostaria de saber que comando posso utilizar, no Banco de Dados :?: Oracle, para força forçar uma pesquisa por um determinado índice, por mim selecionado, ao invés de deixar a pesquisa por conta do plano de acesso do Oracle.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Use um hint:

Selecionar tudo

SELECT /*+ index (tabela índice) */
  CAMPO
FROM SUA_TABELA
WHERE...
Dessa forma, ele forçará o uso do indice! :-o
erthal
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 130
Registrado em: Seg, 22 Nov 2004 1:45 pm
Localização: Niterói - RJ
Gustavo Erthal Jr. | TRISCAL
...................................................
Rio de Janeiro | (21) 2507-2010
São Paulo | (11) 3167-0526
www.triscal.com.br

Hélio,

Essa é uma questão muito importante, porque todos acham que SEMPRE usar índices melhoram a performance, o que não é verdade.

A utilização de índices é necessária quando cerca de 20% da tabela ou das tabelas utilizadas deverá ser retornada. Quando iremos acessar a maior parte ou toda uma tabela, o caminho mais fácil é fazer um full scan.

Como o Oracle armazena no índice as colunas escolhidas, mais o ROWID da linha, quando fazemos o Oracle varrer um índice, pegar o ROWID das linhas selecionadas, ele depois precisa varrer a tabela para retornar os registros filtrados pela cláusula WHERE. Então, se queremos trazer a maior parte ou toda a tabela, fazê-lo varrer o índice e depois a tabela, acaba se tornando mais oneroso (custoso) do que varrer a tabela por completo.

Para a utilização de índices, e na busca de melhores performances, alguns itens são muito importantes, como:

1. Verificar se a query está bem escrita;
2. Verificar se as tabelas estão sendo analisadas com frequência (utilizamos para isso a packge DBMS_STAT ou o comando ANALYZE);
3. Se os dois passos acima estiverem OK, verificar como Oracle está montando o plano de acesso. Para isso podemos fazer uso do PLSQL Developer, apertando a tecla F5, ou gerando um trace da query, que é bem mais preciso do que fazê-lo gerar o plano.

Quanto aos hints você pode dar uma olhada básica neste link:
http://www.psoug.org/reference/hints.html

Outra boa fonte de consulta é no http://asktom.oracle.com. Neste fórum, mantido pelo Thomas Kyte, da Oracle, ele sempre menciona que quando precisamos de hint para melhorar a performance de uma query, de duas uma, ou o modelo está ruim, ou a query está mal escrita. Como nem sempre é possível refazer o modelo, podemos tentar reescrever a query.

Espero ter sido útil.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 9 visitantes