Pesquisas utilizando índices

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
  

Mensagemem Qui, 22 Jun 2006 7:59 pm

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.
HÉLIO ANDRADE
Localização: BRASÍLIA - DF

Mensagemem Sex, 23 Jun 2006 9:37 am

Use um hint:
Código: Selecionar todos
SELECT /*+ index (tabela índice) */
  CAMPO
FROM SUA_TABELA
WHERE...


Dessa forma, ele forçará o uso do indice! :-o
dr_gori
Localização: Portland, OR USA

Thomas F. G

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

Mensagemem Seg, 03 Jul 2006 5:02 pm

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.
erthal
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



Voltar para DBA Geral

Quem está online

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