|
|
| Mensagem |
Autor |
| Enviada: Seg, 06 Jun 2005 5:02 pm Assunto: [Dica] Índices Virtuais - NOSEGMENT |
|
|
Essa é para quem faz tunning de SQL:
Digamos que você quer verificar se a criação de um novo índice vai ser realmente usada pelo otimizador. Antes de criá-lo, você pode testar se ele resolverá seu problema atraves de INDICE VIRTUAL.
O Oracle vai criar o índice no dicionário de dados mas não vai criar o índice mesmo. Nada será armazenado nem acessado!
| Código: | SQL> set autotrace traceonly explain
SQL> select name from emp where name = 'Alex';
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=164 Card=1 Bytes=500)
1 0 TABLE ACCESS (FULL) OF 'EMP' (Cost=164 Card=1 Bytes=500)
|
Criando o índice
| Código: | SQL> create index emp_vir_idx1 on emp(name) nosegment;
Index created.
|
Vamos ver se ele vai usar:
| Código: | SQL> set autotrace traceonly explain
SQL> select name from emp where name = 'Alex';
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=164 Card=1 Bytes=500)
1 0 TABLE ACCESS (FULL) OF 'EMP' (Cost=164 Card=1 Bytes=500)
|
Ei, porque o oracle não está usando meu novo índice? Ahá, você deve primeiro alterar sua sessão com o parâmetro oculto "_use_nosegment_indexes".
| Código: | SQL> alter session set "_use_nosegment_indexes" = true;
Session altered.
SQL> select name from emp where name = 'Alex';
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=1 Bytes=500)
1 0 INDEX (RANGE SCAN) OF 'EMP_VIR_IDX1' (NON-UNIQUE) (Cost=1 Card=1 Bytes=500)
|
_________________ Thomas F. G.
Campanha: Faça uma pesquisa antes de perguntar!!!
|
|
dr_gori Moderador


Registrado em: Seg, 3 de Mai de 2004 Mensagens: 3220 Cidade - UF: Porto Alegre - RS
|
|
|
 |
| Enviada: Qua, 05 Mar 2008 4:24 pm |
|
|
Opa,
eu estive pesquisando sobre esse tipo de indice("indice virtual") e fiz alguns testes aqui na minha base.
E por mais que testei, cheguei a conclusão que aqui na minha base não está funcionando.
Quanod executo o explain da query, o indice virtual até é mostrado e o custo da maquina diminui.
Porem o ganho de tempo de execução não altera em nada. Se eu coloc para executar sem o indice virtual(Acesso FULL), leva 3 minutos. Com o indice Virtual, leva os mesmo 3 minutos.
Fiz o teste e criei um indice normal, sem a opção de nosegment. Com esse indice normal, a query executou muito bem. O explain dela ficou utilizando o novo indice eo tempo diminuiu para 15 segundos aproximandamente.
O que será que tem de errado???é alguma configuração de banco???
O banco que estou trabalhando é o 10g Release 10.2.0.3.0.
valewsssssssss
|
|
Nites Rank: Estagiário Júnior

Registrado em: Qua, 5 de Março de 2008 Mensagens: 1 Cidade - UF: Joinville/SC
|
|
|
 |
| Enviada: Sex, 07 Mar 2008 12:39 pm |
|
|
To chutando, depois vou pesquisar melhor esse assunto, mas acho que o objetivo dele seria ver se o Oracle usa o indice no plano de execução e não deve mesmo melhorar o tempo...porque afinal de contas ele não existe, não tem segmentos.
Alguém sabe sobre mais esse assunto?? Hoje é sexta e estou com preguiça de pesquisar.
_________________ Anderson
DBA Sr.
http://www.ruevers.webs.com
|
|
ruevers Rank: DBA Sênior

Registrado em: Sex, 2 de Junho de 2006 Mensagens: 322 Cidade - UF: sp
|
|
|
 |
| Enviada: Sáb, 08 Mar 2008 8:26 am Assunto: bom dia! |
|
|
|
Olá povo!!! beleza??
Eu estou querendo fazer minha monografia da faculdade sobre o tema "SQL performance Tunning"!!!
Eu gostaria de saber se alguém tem material pra me passar... ou livro pra recomendar!! porque a maioria do material que encontro é ingles...
vlw!!!
_________________ Renan Orati
|
|
Renan Orati Rank: Analista Júnior

Registrado em: Qui, 23 de Agosto de 2007 Mensagens: 87 Cidade - UF: Fernandópolis - SP
|
|
|
 |
| Enviada: Sáb, 08 Mar 2008 9:45 am |
|
|
| ruevers escreveu: | o objetivo dele seria ver se o Oracle usa o indice no plano de execução e não deve mesmo melhorar o tempo...porque afinal de contas ele não existe, não tem segmentos.
Alguém sabe sobre mais esse assunto?? Hoje é sexta e estou com preguiça de pesquisar. |
É exatamente isso! Ele não cria o índice! O índice não existe! Só é criado no dicionário de dados. Assim podemos ver se o índice vai melhorar uma consulta ou não, através do plano de execução.
Imagine uma tabela com 100 milhões de linhas, e você tem que fazer tuning nela. Ficar criando índices pra lá e pra cá de 100 milhões vai acabar com o banco! Provavelmente esse tipo de coisa nem seja permitido de fazer em qualquer horário. Daí você cria o índice no-segment e testa a vontade a criação de índices e consultas.
Depois que viu que funciona, basta criá-lo fisicamente!
_________________ Thomas F. G.
Campanha: Faça uma pesquisa antes de perguntar!!!
|
|
dr_gori Moderador


Registrado em: Seg, 3 de Mai de 2004 Mensagens: 3220 Cidade - UF: Porto Alegre - RS
|
|
|
 |
| Enviada: Seg, 10 Mar 2008 11:54 am |
|
|
|
Fiquei preocupado no final de semana com meu chute...achei que tinha dado bola fora, mas como sempre eu e o Oracle estamos conectados mentalmente...rsrsr
O amigo que perguntou sobre material de tunning, eu sempre indico as video aulas, é bom pra começar, tem o básico e depois você pode continuar sozinho.
Aqui no site tem elas, na parte de tutorial explica como adquirir.
_________________ Anderson
DBA Sr.
http://www.ruevers.webs.com
|
|
ruevers Rank: DBA Sênior

Registrado em: Sex, 2 de Junho de 2006 Mensagens: 322 Cidade - UF: sp
|
|
|
 |
|