Pesquisas utilizando índices
-
- 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.
- dr_gori
- 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
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Use um hint:
Dessa forma, ele forçará o uso do indice!
SELECT /*+ index (tabela índice) */
CAMPO
FROM SUA_TABELA
WHERE...
-
- 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
...................................................
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.
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.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 9 visitantes