您不能指望没有显式ORDER BY
子句的任何查询中的行顺序。如果查询有序视图,但没有包括ORDER BY
子句,则如果它们的顺序正确,请感到惊喜,并且不要期望它再次发生。
这是因为查询优化器可以自由地以不同的方式访问行,具体取决于查询,表统计信息,行数,索引等。如果知道查询没有ORDER BY
子句,则可以随意忽略行顺序,以便(咳嗽)更快地返回行。
即使对于众所周知的归类,跨平台的排序顺序也不一定相同。我知道在Mac OS X上对UTF-8进行排序特别奇怪。(Postgresql开发人员称其为_Breaked_。)Postgresql依赖于strcoll(),据我所知它依赖于OS语言环境。
我不清楚Postgresql9.1如何处理这个问题。在9.1中,您可以有多个索引,每个索引具有不同的排序规则。通过一个订单不指定归类通常会使用底层的基表的列的排序规则,但会出现什么优化做的 指数 ,指定不同的排序规则,而不在基表中的未索引的列?