视图的顺序是否有保证?

问题描述 投票:4回答:1

PostgreSQL允许在视图中使用ORDER BY,例如我可以写一个这样的视图:

CREATE VIEW people_overview AS
SELECT
    id
  , name1
  , name2
FROM person
ORDER BY
    name2
  , name1

假设我有一个应用程序,我现在使用这个视图:

SELECT * FROM people_overview

然后,应用程序读取所有数据并以某种方式将其显示给用户,就像使用网格一样。

是否可以保证在这种情况下,在将行恢复到应用程序时会保持视图中指定的顺序?

或者我会更好地将ORDER BY编码到应用程序中?

sql postgresql sql-order-by
1个回答
3
投票

根据评论;在没有ORDER BY的情况下定义视图(除非某些子查询需要它用于TOP N ROWS类型的目的)并让视图的最终用户确定他们想要的排序顺序(因为它确保它们是他们想要的并且风险较小数据将被排序两次,一次是不必要的 - 优化器应该意识到如果应用select * from view order by x,视图内排序是多余的,但是没有太大的意义来承担风险/使额外的代码混乱)。

我也可能将这种理念扩展到数据转换/格式化等方面 - 将数据保存为存储形式,以便尽可能长时间保持有用,并让调用应用程序决定格式化(即不要格式化所有格式如果调用应用程序必须再次解析它以对其进行数学运算等,请在视图中查看yyyyMMdd字符串

© www.soinside.com 2019 - 2024. All rights reserved.