Tunning - Query

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
mariogus
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 157
Registrado em: Sex, 30 Nov 2007 1:17 pm
Localização: Porto Alegre - RS

Informações do Ambiente:
* Versão do Oracle:10G
* Sistema Operacional:Windows

Segue a consulta

Selecionar tudo

SQL> explain plan for select chav.id_chave,obje.cd_objeto, chav.cd_chave, acct.de_valor,acct.dt_atualizacao
  2  from trr_chave chav
  3     ,trr_objeto obje
  4     ,trr_contador cont
  5     ,trr_contador_objeto coob
  6     ,trr_accounting acct
  7  where chav.id_chave = acct.id_chave
  8  and    chav.cd_chave = '4438508#perm!terra'
  9  and    acct.id_contador_objeto = coob.id_contador_objeto
 10  and    coob.id_contador = cont.id_contador
 11  and    cont.cd_contador = 'usage'
 12  and    cont.tp_valor = 'S'
 13  and    coob.id_objeto = obje.id_objeto
 14  and    obje.tp_objeto = 'S'
 15  /

Explain Plan:

Selecionar tudo

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 2786502870
--------------------------------------------------------------------------------
| Id  | Operation                            | Name                | Rows  | Byt
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                     |                     |     1 |
|   1 |  PX COORDINATOR                      |                     |       |
|   2 |   PX SEND QC (RANDOM)                | :TQ10001            |     1 |
|   3 |    NESTED LOOPS                      |                     |     1 |
|   4 |     NESTED LOOPS                     |                     |     2 |   1
|   5 |      NESTED LOOPS                    |                     |     2 |   1
|   6 |       NESTED LOOPS                   |                     |     3 |
|   7 |        BUFFER SORT                   |                     |       |
|   8 |         PX RECEIVE                   |                     |       |
|   9 |          PX SEND BROADCAST           | :TQ10000            |       |
|* 10 |           TABLE ACCESS BY INDEX ROWID| TRR_CONTADOR        |     1 |
|* 11 |            INDEX UNIQUE SCAN         | CONT_UK             |     1 |
|  12 |        PX BLOCK ITERATOR             |                     |     3 |
|  13 |         TABLE ACCESS FULL            | TRR_ACCOUNTING      |     3 |
|* 14 |       TABLE ACCESS BY INDEX ROWID    | TRR_CHAVE           |     1 |
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|* 15 |        INDEX UNIQUE SCAN             | CHAV_PK             |     1 |
|* 16 |      TABLE ACCESS BY INDEX ROWID     | TRR_CONTADOR_OBJETO |     1 |
|* 17 |       INDEX UNIQUE SCAN              | COOB_PK             |     1 |
|* 18 |     TABLE ACCESS BY INDEX ROWID      | TRR_OBJETO          |     1 |
|* 19 |      INDEX UNIQUE SCAN               | OBJE_PK             |     1 |
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
  10 - filter("CONT"."TP_VALOR"='S')
  11 - access("CONT"."CD_CONTADOR"='usage')
  14 - filter("CHAV"."CD_CHAVE"='4438508#perm!terra')
  15 - access("CHAV"."ID_CHAVE"="ACCT"."ID_CHAVE")
  16 - filter("COOB"."ID_CONTADOR"="CONT"."ID_CONTADOR")
  17 - access("ACCT"."ID_CONTADOR_OBJETO"="COOB"."ID_CONTADOR_OBJETO")
  18 - filter("OBJE"."TP_OBJETO"='S')
  19 - access("COOB"."ID_OBJETO"="OBJE"."ID_OBJETO")
 
38 rows selected
pauloaleo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 181
Registrado em: Qua, 09 Fev 2005 12:30 pm
Localização: SÃO BERNARDO DO CAMPO - SP

A query já esta fazendo todas as procuras por indice. Esta demorando para rolar?
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

bom.. ate onde sei.. filtros com strings são bastantes custosos dai seria bom você criar indices para estes campos
pauloaleo
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 181
Registrado em: Qua, 09 Fev 2005 12:30 pm
Localização: SÃO BERNARDO DO CAMPO - SP

O problema é a cardinalidade. Vamos supor , no caso dos dois filtros que você tem com = 'S' e o campo so admite conteudo N e S , a cardinalidade é baixissima , e mesmo criando o indice , o ORACLE não vai usar o mesmo.

Ele vai montar todas a seleção e depois filtrar o conteudo , que só pode ter dois estados , S ou N.

Se você esta falando do and chav.cd_chave = '4438508#perm!terra'
talvez a cardinalidade deste campo seja grande. Se for vale a pena. Se náo , cai na mesma coisa que a anterior acima.

[]s
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

good tip

:lol:
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5026
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

Só pra complementar sobre a cardinalidade:
* nos casos de baixa cardinalidade (tipo, campo SEXO, que só suporta M ou F), existem os BITMAP INDEXES, feito exatamente pra esse tipo de campo!
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante