Bom, acredito que se vc "forçar o plano" ele deverá utilizar...

Não trabalhei muito com o Firebird, não sei te dizer com certeza.

Mas se vc utiliza essa consulta em apenas um lugar te indicaria trocar

a view pelo select diretamente na tabela,

Select * from tabela1 where telefone = X
union all
Select * from tabela2 where telefone = X;

por aí.. pois para vc forçar o plano terá que fazer na view, o que não me 
parece uma solução ideal.





Att,

Celso Lorenzetti
Analista de Sistemas
msn: [EMAIL PROTECTED]
--------------------------------------------------------------
SysRS Tecnologia da Informação Ltda.
             www.sysrs.com.br
  ----- Original Message ----- 
  From: Marcelo Alves 
  To: delphi-br@yahoogrupos.com.br 
  Sent: Saturday, March 24, 2007 10:16 AM
  Subject: [delphi-br] Re: Performance em View


  Celso,

  Quanto a usar o like comprovei isso mesmo...

  Agora tem um detalhe, testei o mesmo select sem o like... na view, 
  ele continua usando o plano Natural, agora se eu fizer o select 
  direto na tabela aí ele usa os índices....

  Será que não existe uma forma de eu fazer sem que fique lento??? O 
  problema é que preciso pesquisar por um telefones em várias tabelas 
  diferentes e campos diferentes... por isso crei a view....

  Marcelo.

  --- Em delphi-br@yahoogrupos.com.br, Celso Lorenzetti - GMail 
  <[EMAIL PROTECTED]> escreveu
  >
  > Olá Marcelo,
  > 
  > Quando vc utiliza Like "%%", 
  > 
  > não tem como utilizar índice, ou se utilizá-se ficaria mais lento 
  do que acessar diretamente a tabela.
  > 
  > Porque teria que fazer dois acessos, um ao índice e outro a tabela 
  para recuperar o registro.
  > 
  > Até onde eu sei funciona desta forma.
  > 
  > Att,
  > 
  > Celso Lorenzetti
  > Analista de Sistemas
  > msn: [EMAIL PROTECTED]
  > ----------------------------------------------------------
  > SysRS Tecnologia da Informação Ltda.
  > www.sysrs.com.br
  > ----- Original Message ----- 
  > From: Marcelo Alves 
  > To: delphi-br@yahoogrupos.com.br 
  > Sent: Thursday, March 22, 2007 9:02 PM
  > Subject: [delphi-br] Re: Performance em View
  > 
  > 
  > Então Rubem, eu já fiz isso, criei os índices em cada campo de 
  > telefone das tabelas, mas nada mudou no plano... é como se a view 
  > ignorasse os meus índices... será que tenho que criar de outra 
  forma?
  > 
  > veja abaixo o plano que está sendo executado...
  > 
  > Comando executado:
  > 
  > select * from vw_telefones where telefone like '%4646456%'
  > 
  > plano retornado:
  > 
  > PLAN (VW_TELEFONES ARQCONTATOS NATURAL)
  > PLAN (VW_TELEFONES ARQCONTATOS NATURAL)
  > PLAN (VW_TELEFONES ARQCONTATOS NATURAL)
  > PLAN (VW_TELEFONES ARQCLIENTES NATURAL)
  > PLAN (VW_TELEFONES ARQCLIENTES NATURAL)
  > PLAN (VW_TELEFONES ARQCLIENTES NATURAL)
  > PLAN (VW_TELEFONES ARQEMPRESAS NATURAL)
  > PLAN (VW_TELEFONES ARQEMPRESAS NATURAL)
  > PLAN (VW_TELEFONES ARQEMPRESAS NATURAL)
  > PLAN (VW_TELEFONES ARQEMPRESAS NATURAL)
  > PLAN (VW_TELEFONES ARQEMPRESAS NATURAL)
  > PLAN (VW_TELEFONES ARQEMPRESAS NATURAL)
  > PLAN JOIN (VW_TELEFONES USU NATURAL, VW_TELEFONES UTE INDEX 
  > (PK_ARQUSU_TELEFONES))
  > PLAN (VW_TELEFONES ARQCLI_FOR INDEX (RDB$PRIMARY63))
  > PLAN (VW_TELEFONES ARQCLI_FOR INDEX (RDB$PRIMARY63))
  > PLAN (VW_TELEFONES ARQCLI_FOR INDEX (RDB$PRIMARY63))
  > 
  > Marcelo.
  > 
  > --- Em delphi-br@yahoogrupos.com.br, "Rubem Nascimento da Rocha" 
  > <djpardalrocha@> escreveu
  > >
  > > 
  > > Faz um SELECT nessa View usando um filtro (cláusula WHERE) pro 
  > resultado ser 
  > > relativamente pequeno. Analisa o plano de execução e daí, com 
  base 
  > nisso, 
  > > cria índices apropriados pras tabelas envolvidas na VIEW. Sds.
  > > 
  > > >From: "Marcelo Alves" <delphigrupos@>
  > > >Reply-To: delphi-br@yahoogrupos.com.br
  > > >To: delphi-br@yahoogrupos.com.br
  > > >Subject: [delphi-br] Performance em View
  > > >Date: Wed, 21 Mar 2007 01:17:40 -0000
  > > >
  > > >Pessoal,
  > > >
  > > >Tenho uma View de Telefones de vários cadastros, ou seja, a 
  junção
  > > >dos campos de telefone de algumas tabelas
  > > >
  > > >Ex:
  > > >
  > > >TABELA CLIENTES
  > > >ID
  > > >FONE1
  > > >FONE2
  > > >FONE3
  > > >
  > > >TABELA EMPRESAS
  > > >ID
  > > >FONE1
  > > >FONE2
  > > >FONE3
  > > >FONE4
  > > >
  > > >
  > > >Na criação da View faço vários unions conforme abaixo
  > > >
  > > >SELECT ID, FONE1, 'CLIENTES' FROM CLIENTES UNION SELECT ID,
  > > >FONE2, 'CLIENTES' FROM CLIENTES UNION SELECT ID, 
  FONE3, 'CLIENTES'
  > > >FROM CLIENTES UNION SELECT ID, FONE1, 'EMPRESAS' FROM EMPRESAS 
  > UNION
  > > >SELECT ID, FONE2, 'EMPRESAS' FROM EMPRESAS UNION SELECT ID,
  > > >FONE3, 'EMPRESAS' FROM EMPRESAS UNION SELECT ID, 
  FONE4, 'EMPRESAS'
  > > >FROM EMPRESAS
  > > >
  > > >No caso tem tabelas que possuem mais telefones que outras 
  conforme 
  > o
  > > >exemplo acima..
  > > >
  > > >Meu problema está sendo a performance porque hoje a view 
  retorna 
  > mais
  > > >de 170.000 telefones e eu tenho uma pesquisa de Telefones no 
  > sistema,
  > > >o que se tornou muito lenta, chegando até a travar o servidor 
  > quando
  > > >executada.. No caso faço a pesquisa direto na view com 
  utilizando
  > > >like... Criei índices nos campos de telefone das tabelas 
  utilizadas
  > > >na View, mas não obtive nenhuma melhora de performance visto 
  que os
  > > >planos usados são NATURAL para todas as tabelas, ou seja, a 
  view 
  > não
  > > >se utilizou dos índices...
  > > >
  > > >Existe algo que eu possa fazer para melhorar isso???
  > > >
  > > >Agradeço desde já a ajuda de Todos...
  > > >
  > > >Marcelo.
  > > >
  > > >
  > > 
  > > __________________________________________________________
  > > MSN Busca: fácil, rápido, direto ao ponto. 
  http://search.msn.com.br
  > >
  > 
  > 
  > 
  > 
  > 
  > [As partes desta mensagem que não continham texto foram removidas]
  >



   

[As partes desta mensagem que não continham texto foram removidas]

Responder a