Re: [delphi-br] Re: Performance em View
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
[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' 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
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
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 >