Demora em um select com inner join
Olá amigos, tenho que fazer um select mas o mesmo está demorando até 8 segundos para retornar, visto que as duas tabelas envolvidas tem em torno de 1300 registros e minha maquina é rápida. Testei o mesmo pelo ibexpert e também demorou esse tempo.
Tabelas envolvidas: Ficha e Clientes
Campo envolvido: codcli
Indice da tabela clientes: codemp,codcli
Select:
Obrigado pela atenção
Mario
Tabelas envolvidas: Ficha e Clientes
Campo envolvido: codcli
Indice da tabela clientes: codemp,codcli
Select:
select ficha.codfic, ficha.data, ficha.codid, ficha.codcli, clientes.nomcli as nomcli, clientes.apelido as apelido, clientes.telefone as telefone, clientes.telemovel as telemovel from ficha Left Join clientes on (ficha.codemp=clientes.codemp and ficha.codcli=clientes.codcli) where (ficha.codemp=:codemp) order by ficha.data
Obrigado pela atenção
Mario
Aldus
Curtidas 0
Respostas
Everton
11/08/2007
Colega,
Não há nada de errado no teu SQL. Pelo que você descreveu, há um índice para codemp e codcli. Creio que o ´problema´ está no ´order by Data´. Se você realizar a mesma consulta sem o ´order by´ com certeza será ´um tiro´.
Não há nada de errado no teu SQL. Pelo que você descreveu, há um índice para codemp e codcli. Creio que o ´problema´ está no ´order by Data´. Se você realizar a mesma consulta sem o ´order by´ com certeza será ´um tiro´.
GOSTEI 0
Aldus
11/08/2007
Olá Everton, realmente retirando o order by selecionou rápido, mas voce saberia como contornar o problema? Tenho no grid que mostra a seleção, a opção de clicar no título de ordenar pela coluna, daí eu teria que criar antecipadamente um índice para esta coluna, certo? Mas como criar o índice para coluna que só existirá no select, como nomcli, apelido, telefone, etc?
Obrigado pela atenção.
Mario
Obrigado pela atenção.
Mario
GOSTEI 0
Rodc
11/08/2007
Mas o campo de data é data mesmo ou é do tipo String? Se for data era para a ordenação ser rápida. Verifica se o order não está sendo realizado apenas depois de realizar o join, no Oracle tinha várias condições desse tipo que influenciava na velocidade, como por exemplo a ordem da validação no join.
Tenta ao invés de usar assim
usar assim
Tenta ao invés de usar assim
Left Join clientes on (ficha.codemp=clientes.codemp and ficha.codcli=clientes.codcli)
usar assim
Left Join clientes on (ficha.codcli=clientes.codcli and ficha.codemp=clientes.codemp)
GOSTEI 0
Aldus
11/08/2007
Olá, o campo data é do tipo data.
1) estou testando no ibexpert.
2) executei o select sem o order by e executou rapidamente
3) ao ver os dados selecionados no grid do ibexpert, clico no titulo da coluna nomcli, criada pelo select, aí demora novamente
Acho eu que o problema da demora está na sincronização do join.
grato
1) estou testando no ibexpert.
2) executei o select sem o order by e executou rapidamente
3) ao ver os dados selecionados no grid do ibexpert, clico no titulo da coluna nomcli, criada pelo select, aí demora novamente
Acho eu que o problema da demora está na sincronização do join.
grato
GOSTEI 0
Emerson Nascimento
11/08/2007
crie um índice na tabela Ficha pelos campos data, codemp e codcli e veja se surte alguma melhora.
GOSTEI 0
Aldus
11/08/2007
Olá Emerson, criei os índices das colunas que vc mencionou e funcionou rapidamente. O problema ainda persistente pois faltaram indexar pelas colunas vindas de outra tabela (nomcli,apelido,telefone,telemovel) e tambem quando abro a tela sempre mostro pela ordem decrescente de data. Nesses casos ainda continua lento.
Ainda tentando...
Ainda tentando...
GOSTEI 0
Sremulador
11/08/2007
Amigo tente dar o left na tabela que possui menos registros, outro detalhe e que quanto mais crescer a tabela a consulta com left, mas vai demorar, vc deve planejar corretamente, você pode fazer uma procedure para contornar este situação, que vai ficar blz...
GOSTEI 0
Aldus
11/08/2007
Olá amigos,
Para evitar futuros problemas com o aumento de dados, criei os campos na tabela ficha e aí funciona sem problemas.
Obrigado pela atenção de todos.
abraço
Para evitar futuros problemas com o aumento de dados, criei os campos na tabela ficha e aí funciona sem problemas.
Obrigado pela atenção de todos.
abraço
GOSTEI 0