Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

A ordem de uma instrução SQL Select sem a cláusula Order By


Não, esse comportamento não é confiável. A ordem é determinada pela maneira como o planejador de consulta decidiu construir o conjunto de resultados. consultas simples como select * from foo_table provavelmente serão retornados na ordem em que são armazenados no disco, que pode estar na ordem da chave primária ou na ordem em que foram criados, ou em alguma outra ordem aleatória. consultas mais complexas, como select * from foo where bar < 10 em vez disso, pode ser retornado na ordem de uma coluna diferente, com base em uma leitura de índice, ou pela ordem da tabela, para uma varredura de tabela. consultas ainda mais elaboradas, com multipe where condições, group by cláusulas, union s, será em qualquer ordem que o planejador decida ser mais eficiente para gerar.

A ordem pode até mudar entre duas consultas idênticas apenas por causa dos dados que foram alterados entre essas consultas. uma cláusula "where" pode ser satisfeita com uma varredura de índice em uma consulta, mas inserções posteriores podem tornar essa condição menos seletiva, e o planejador pode decidir realizar uma consulta subsequente usando uma varredura de tabela.

Para colocar um ponto mais fino sobre isso. Os sistemas RDBMS têm o mandato de fornecer a você exatamente o que você pediu, da forma mais eficiente possível. Essa eficiência pode assumir várias formas, incluindo minimizar a E/S (tanto para o disco quanto pela rede para enviar dados a você), minimizar a CPU e manter o tamanho de seu conjunto de trabalho pequeno (usando métodos que exigem armazenamento temporário mínimo).

sem um ORDER BY cláusula, você não terá perguntado exatamente para uma ordem específica e, portanto, o RDBMS fornecerá essas linhas em alguma ordem que (talvez) corresponda a algum aspecto coincidente da consulta, com base em qualquer algoritmo que o RDBMS espera produzir os dados mais rapidamente.

Se você se preocupa com a eficiência, mas não com o pedido, pule o ORDER BY cláusula. Se você se preocupa com o pedido, mas não com a eficiência, use o ORDER BY cláusula.

Como você realmente se importa com AMBOS use ORDER BY e, em seguida, ajuste cuidadosamente sua consulta e banco de dados para que seja eficiente.