Recentemente, tive uma discussão com um colega que estava pressionando para remover as cláusulas order by de uma consulta de produção porque a coluna order by era igual à chave primária .
Depois de uma longa discussão na qual tentei explicar que ele não pode garantir a ordenação com base na chave primária, a conclusão final foi que ele não iria pressionar para que as consultas MSSQL fossem alteradas.
Mas ele ainda iria mudar as consultas do DB2.
Não consegui encontrar imediatamente um artigo refutando que o DB2 ordena as consultas pela chave primária e, no momento, estou me perguntando se isso acontece ou não.
Portanto, minha pergunta é: como o DB2 ordena uma consulta se não houver uma cláusula order by? Ele usa a chave primária?
Como garantir que os dados saiam ordenados corretamente, sem uma cláusula order by, em um sistema paralelo?
Não, seu colega está errado.
Todos os produtos SQL - DBMS que se comportam de acordo com os padrões SQL - não fornecem nenhuma garantia de que o resultado de uma saída de consulta será ordenado de alguma forma, a menos que haja uma
ORDER BY
cláusula na consulta .Como os documentos do IBM DB2 mencionam :
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á foram pesquisados de forma a garantir a ordem correta, é porque o SGBD decidiu por essa estratégia e já saberá que nenhum trabalho de classificação adicional é necessário 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?), o SGBD levará isso em consideração e se encontrar uma estratégia diferente que seja mais eficiente para encontrar os dados corretos em algum outro pedido, ele se aproveitará do fato de que você aparentemente não se importou com o pedido. (A estratégia escolhida também pode mudar ao longo do 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 de consulta ligeiramente menor), mas potencialmente uma grande desvantagem se a ordem for realmente importante. Especialmente porque 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 no futuro.