AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 86855
Accepted
Reaces
Reaces
Asked: 2014-12-24 02:21:14 +0800 CST2014-12-24 02:21:14 +0800 CST 2014-12-24 02:21:14 +0800 CST

O DB2 ordena os dados pela chave primária

  • 772

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?

db2 order-by
  • 2 2 respostas
  • 5836 Views

2 respostas

  • Voted
  1. Best Answer
    ypercubeᵀᴹ
    2014-12-24T02:38:11+08:002014-12-24T02:38:11+08:00

    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 BYcláusula na consulta .

    Como os documentos do IBM DB2 mencionam :

    A ordenação é realizada de acordo com as regras de comparação descritas em Elementos de linguagem. O valor nulo é maior do que todos os outros valores. Se sua especificação de ordenação não determinar uma ordenação completa, as linhas com valores duplicados da última chave de classificação identificada terão uma ordem arbitrária. Se você não especificar ORDER BY, as linhas da tabela de resultados terão uma ordem arbitrária.

    • 19
  2. Håkan Lindqvist
    2014-12-24T03:23:42+08:002014-12-24T03:23:42+08:00

    Como foi apontado na resposta do ypercube, quando não há ORDER BYclá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 BYclá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 BYclá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.

    • 11

relate perguntas

  • O que significa TBSCAN GENROW no Plano Explicativo?

  • Emule o comportamento do REGEXP no DB2 SQL

  • adicionar um pedido por a esta consulta retorna mais rápido do que sem, por quê?

  • BLOB no DB2 v9 no z/OS

  • O que significa HSJOIN em um plano de explicação?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve