Fórum Buscar mesmos dados com SQL diferente resultando em resposta muito mais rápida, não entendi a lógica. #604005
29/07/2019
0
select dado1, dado2, dado3, dado4 from tabela tb where tb.dado1="algo" and tb.dado2="algo" order by tb.dado3
Este primeiro é o padrão que eu deveria usar, então fiz este segundo sql:
select * from (select dado1, dado2, dado3, dado4 from tabela) as tb where tb.dado1="algo" and tb.dado2="algo" order by tb.dado3
O que não estou entendendo é que o segundo sql está retornando quase que instantaneamente enquanto o primeiro demora cerca de 4 minutos.
Alguém saberia me dizer o motivo pelo qual o segundo sql retorna mais rapidamente os dados?
Jonatas Teodoro
Curtir tópico
+ 0Posts
29/07/2019
Matheus Luis
select dado1, dado2, dado3, dado4 from tabela tb where tb.dado1="algo" and tb.dado2="algo" order by tb.dado3
Este primeiro é o padrão que eu deveria usar, então fiz este segundo sql:
select * from (select dado1, dado2, dado3, dado4 from tabela) as tb where tb.dado1="algo" and tb.dado2="algo" order by tb.dado3
O que não estou entendendo é que o segundo sql está retornando quase que instantaneamente enquanto o primeiro demora cerca de 4 minutos.
Alguém saberia me dizer o motivo pelo qual o segundo sql retorna mais rapidamente os dados?
Provavelemente pq vc usou o * no select. O * faz retornar todos os campos e quando você os informa provavelmente pegara menos campos.
Gostei + 0
29/07/2019
Jonatas Teodoro
select dado1, dado2, dado3, dado4 from tabela tb where tb.dado1="algo" and tb.dado2="algo" order by tb.dado3
Este primeiro é o padrão que eu deveria usar, então fiz este segundo sql:
select * from (select dado1, dado2, dado3, dado4 from tabela) as tb where tb.dado1="algo" and tb.dado2="algo" order by tb.dado3
O que não estou entendendo é que o segundo sql está retornando quase que instantaneamente enquanto o primeiro demora cerca de 4 minutos.
Alguém saberia me dizer o motivo pelo qual o segundo sql retorna mais rapidamente os dados?
Provavelemente pq vc usou o * no select. O * faz retornar todos os campos e quando você os informa provavelmente pegara menos campos.
Então.. é justamente o que eu uso o * que é mais rápido.
select * from (select dado1, dado2, dado3, dado4 from tabela) as tb where tb.dado1="algo" and tb.dado2="algo" order by tb.dado3
Esse me retorna muito mais rápido.
Gostei + 0
29/07/2019
Jothaz
Qual a diferença de tempo?
A tabela possui algum índice?
O srcipts são idênticos mesmo só alterando que o segundo busca de uma subquery?
Gostei + 0
29/07/2019
Jonatas Teodoro
Gostei + 0
29/07/2019
Emerson Nascimento
select tb.dado1, tb.dado2, tb.dado3, tb.dado4 from tabela tb where tb.dado1="algo" and tb.dado2="algo" order by tb.dado3
ou assim:
select dado1, dado2, dado3, dado4 from tabela where dado1="algo" and dado2="algo" order by dado3
e qual a diferença destas para aquela que você postou?
na primeira estou selecionando todos os campos com indicação do nome/apelido da tabela, e na segunda não uso em nenhum campo (sequer dei um apelido pra tabela).
Gostei + 0
29/07/2019
Jothaz
Qual o banco de dados vc esta usando?
O servidor é de produção? Roda outros processos?
Trabalho com SQL a muito tempo e nunca vi nada parecido, inclusive subquery tende a ser menos performática.
Fiz um teste com 500.000 registros e o resultado foi idêntico.
Gostei + 0
29/07/2019
Jonatas Teodoro
Qual o banco de dados vc esta usando?
O servidor é de produção? Roda outros processos?
Trabalho com SQL a muito tempo e nunca vi nada parecido, inclusive subquery tende a ser menos performática.
Fiz um teste com 500.000 registros e o resultado foi idêntico.
Foi feita no "back-end", usamos o Progress (Conexão ODBC), servidor de produção, servidor roda somente o banco.
Gostei + 0
29/07/2019
Jothaz
Nunca usei o Progress. então não posso opinar.
ODBC é de 32 ou 64?
Gostei + 0
29/07/2019
Jonatas Teodoro
Nunca usei o Progress. então não posso opinar.
ODBC é de 32 ou 64?
É de 64
Gostei + 0
30/07/2019
Jothaz
Vamos aguardar alguém com experiência em Progress se manifestar, mas pela minha vivência isto não faz muito sentido!
Eu faria os seguintes testes;
1 - Testaria em várias máquinas diferentes para verificar se o cenário se repete.
2 - Retirava todas as condições do Where e iria acrescentando aos poucos.
3 - Tentaria rodar diretamente no banco de dados, sei que as vezes isto não é possível.
4 - Se persistir o mesmo cenário, usaria o de melhor performance e me conformaria! kkkkkkkkkkkkkkkkkkk
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)