PostgreSQL在视图中允许ORDER BY
,因此,例如,我可以编写如下视图:
CREATE VIEW people_overview AS
SELECT
id
, name1
, name2
FROM person
ORDER BY
name2
, name1
假设我有一个应用程序,现在我可以在其中使用这种视图:
SELECT * FROM people_overview
然后,该应用读取所有数据,并以某种方式将其显示给用户,例如网格。
是否可以保证在这种情况下,重新向应用程序重新访问行时,视图中指定的顺序得以保留?
还是最好将ORDER BY
编码到应用程序中?
答案 0 :(得分:3)
根据评论;定义没有ORDER BY的视图(除非某些子查询出于TOP N ROWS类型的目的需要它),然后让视图的最终用户确定他们想要的排序顺序(因为这样可以保证满足他们的需求,并且风险更低)数据将被不必要地排序两次,一次-优化器应意识到,如果应用select * from view order by x
,则视图内排序是多余的,但是冒着风险/使多余的代码杂乱无济。
我可能还会将此哲学扩展到诸如数据转换/格式化之类的内容-将数据保留为存储形式,以便在尽可能长的时间内保持有用,并让调用的应用程序决定格式化(即不在您的视图中将所有日期格式化为yyyyMMdd字符串,如果调用的应用程序随后必须再次对其进行解析以对其进行一些数学运算,等等)