Recentemente, tive uma discussão com um colega que estava pressionando para remover as cláusulas de ordem por uma consulta de produção, porque a ordem por coluna era igual à chave primária .
Após uma longa discussão em que tentei explicar que ele não pode garantir pedidos com base na chave primária, a conclusão final foi que ele não pressionaria para que as consultas do MSSQL fossem alteradas.
Mas ele ainda iria alterar as consultas do DB2.
Não pude encontrar imediatamente um artigo que refutasse que o DB2 solicitasse consultas pela chave primária e, no momento, estou me perguntando se o faz.
Portanto, minha pergunta é: como o DB2 solicita uma consulta se não houver uma cláusula order by? Ele usa a chave primária?
Como garantir que os dados sejam enviados corretamente, sem uma cláusula order by, em um sistema paralelo?
Como foi apontado na resposta do ypercube, quando não há
ORDER BY
cláusula, não há ordem definida .O que eu gostaria de acrescentar é que é importante perceber que o SQL é uma abstração, não especifica passo a passo o que o DBMS deve fazer, mas especifica seus requisitos do resultado final.
Isso implica que, se os dados já forem pesquisados de maneira a garantir a ordem correta, é porque o DBMS decidiu por essa estratégia e já saberá que não é necessário nenhum trabalho de classificação adicional para atender aos requisitos da
ORDER BY
cláusula .Por outro lado, se você não especificar que o pedido é significativo para você (mesmo que seja realmente?), O DBMS levará isso em consideração e se encontrar uma estratégia diferente que seja mais eficiente para encontrar os dados corretos em em algum outro pedido, ele aproveitará o fato de que você aparentemente não se importou com o pedido. (A estratégia escolhida também pode mudar com o tempo, com base no aumento da quantidade de dados nas tabelas relevantes, patches de software etc.)
Ou seja, remover a
ORDER BY
cláusula tem muito pouca vantagem (tamanho da consulta um pouco menor), mas potencialmente enorme desvantagem se o pedido for realmente importante. Especialmente, pois isso poderia muito bem funcionar com o conjunto de dados de teste e passar pelo teste de aceitação apenas para causar sérios problemas na linha.fonte