Re: [delphi-br] Re: Performance em View

2007-03-25 Por tôpico Celso Lorenzetti - GMail
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" 
  >  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" 
  > > >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 -
  > > >
  > > >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&#x

[delphi-br] Re: Performance em View

2007-03-24 Por tôpico Marcelo Alves
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" 
>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" 
>   > >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 -
>   > >
>   > >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]
>




Re: [delphi-br] Re: Performance em View

2007-03-23 Por tôpico Celso Lorenzetti - GMail
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" 
  <[EMAIL PROTECTED]> 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" <[EMAIL PROTECTED]>
  > >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 -
  > >
  > >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]



[delphi-br] Re: Performance em View

2007-03-22 Por tôpico Marcelo Alves
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" 
<[EMAIL PROTECTED]> 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" <[EMAIL PROTECTED]>
> >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 -
> >
> >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
>