PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Order by in view garante ordem de select?


Você não pode contar com a ordem das linhas em qualquer consulta que não tenha um ORDER BY explícito cláusula. Se você consultar uma exibição ordenada, mas não incluir um ORDER BY cláusula, fique agradavelmente surpreso se eles estiverem na ordem certa e não espere que isso aconteça novamente.

Isso ocorre porque o otimizador de consulta é livre para acessar linhas de diferentes maneiras, dependendo da consulta, estatísticas da tabela, contagens de linhas, índices e assim por diante. Se ele souber que sua consulta não tem um ORDER BY cláusula, é livre para ignorar a ordem das linhas para (tosse) retornar as linhas mais rapidamente.

Um pouco fora do tópico. . .

A ordem de classificação não é necessariamente idêntica nas plataformas, mesmo para agrupamentos conhecidos. Eu entendo que classificar UTF-8 no Mac OS X é particularmente estranho. (Os desenvolvedores do PostgreSQL chamam de quebrado .) PostgreSQL depende de strcoll(), que eu entendo que depende das localidades do sistema operacional.

Não está claro para mim como o PostgreSQL 9.1 irá lidar com isso. Na versão 9.1, você pode ter vários índices, cada um com um agrupamento diferente . Um ORDER BY que não especifica um agrupamento normalmente usará o agrupamento das colunas da tabela base subjacente, mas o que o otimizador fará com um índice que especifica um agrupamento diferente de uma coluna não indexada na tabela base?