none
Critério de ordenação sem Order By RRS feed

  • Pergunta

  • Boa Tarde Srs, uma curiosidade: em uma query simple (select * from <tabela>), quando não usamos o order by, qual critério de ordenação que é efetuada?

    Se existir uma tabela com chave primária e outra sem chave primária, o que o select leva em consideração para mostrar o resultado?

    Obrigado  pela atenção.


    --- André Abreu

    quarta-feira, 7 de janeiro de 2015 20:33

Respostas

  • André,

    Quando não é especificado à cláusula ORDER BY, então sua consulta vai se basear na ordem:

    - Colunas indicadas em seu índice clusterizado;

    - Caso não exista um índice clusterizado, então se baseia nas colunas indicadas em seu índice não clusterizado (desde que utilizado pela instrução SELECT em seu plano de execução);

    Quando a consulta é efetuada em uma "hash table" (sem índices clusterizados), então a instrução SELECT obedece à ordem de inclusão dos registros na tabela.

    Porém é importante ressaltar que à equipe de desenvolvimento do SQL Server não garante que seja possível obter a ordenação de dados corretamente (em todas suas possibilidades) sem utilizar à cláusula ORDER BY.

    Para maiores informações veja:

    http://technet.microsoft.com/PT-BR/library/jj835095(v=sql.110).aspx

    http://msdn.microsoft.com/pt-br/library/ms188385.aspx

    http://msdn.microsoft.com/en-us/library/dd171921(v=sql.100).aspx

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    quarta-feira, 7 de janeiro de 2015 22:48
    Moderador

Todas as Respostas

  • André,

    Quando não é especificado à cláusula ORDER BY, então sua consulta vai se basear na ordem:

    - Colunas indicadas em seu índice clusterizado;

    - Caso não exista um índice clusterizado, então se baseia nas colunas indicadas em seu índice não clusterizado (desde que utilizado pela instrução SELECT em seu plano de execução);

    Quando a consulta é efetuada em uma "hash table" (sem índices clusterizados), então a instrução SELECT obedece à ordem de inclusão dos registros na tabela.

    Porém é importante ressaltar que à equipe de desenvolvimento do SQL Server não garante que seja possível obter a ordenação de dados corretamente (em todas suas possibilidades) sem utilizar à cláusula ORDER BY.

    Para maiores informações veja:

    http://technet.microsoft.com/PT-BR/library/jj835095(v=sql.110).aspx

    http://msdn.microsoft.com/pt-br/library/ms188385.aspx

    http://msdn.microsoft.com/en-us/library/dd171921(v=sql.100).aspx

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    quarta-feira, 7 de janeiro de 2015 22:48
    Moderador
  • Durval,

       Hash=HEAP?


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    quinta-feira, 8 de janeiro de 2015 02:49
    Moderador
  • Caro Durval,

    Acabei de realizar um teste, onde o comportamento ocorre o inverso da sua explicação, no qual o primeiro critério usado para a ordenação sem ORDER BY foi o índice não clusterizado.

    Por favor, saberia me informar se isso pode ser alguma configuração?

    quarta-feira, 11 de outubro de 2017 15:33
  • Não existe configuração de ordenação ,pelo que conheço , não existe critério de ordenação , em um select sem Order by, o Otimizador de Consultas do  SQL Server  que decide se vai ou não ordenar , isso é com ele.

    Uma tabela e uma  relação, e uma relação não tem ordenação a não ser que especifique.

    Se você não especificar um pedido na cláusula ORDER BY, os resultados da consulta não aparecerão em ordem.

    https://technet.microsoft.com/pt-br/library/e9zc0283(v=vs.80).aspx

    https://docs.microsoft.com/pt-br/sql/t-sql/queries/select-order-by-clause-transact-sql

    Classificar o conjunto de resultados de uma consulta pela lista de colunas especificada e, opcionalmente, limitar as linhas retornadas a um intervalo especificado. A ordem na qual as linhas são retornadas em um conjunto de resultados não é garantida, a menos que uma cláusula ORDER BY seja especificada.

    Wesley Neves - Brasilia-DF

     
    https://wesleyneves.wordpress.com/
    MTA-SQL Server
    MTA- Web Development
    Analista Desenvolvedor.NET
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"




    Wesley Neves

    quarta-feira, 11 de outubro de 2017 15:51