索引或autovacuum是否会更改查询结果的行为?

时间:2013-10-03 10:50:03

标签: postgresql indexing vacuum

我对特定查询的结果有疑问。

  

SELECT final_copy,num_chars FROM table1 t1,table2 t2

     

在哪里t1.numid = t2.id

使用此查询获取两行

  

final_copy | num_chars

     

------------ + -----------------

     1 | 1272
       | 1075

这里final_copy 1是插入的最新记录。此查询在循环中运行,并始终以第一行中的final_copy为1返回记录。如您所见,查询未使用任何“order by”。

但是现在查询结果变得不一致,即根据最后一个插入日期不返回行。

我怀疑的是,在真空或重建索引时是否有可能改变查询结果的行为。上周我已经完成了这些表的重新索引和真空。这会改变结果的行为吗?

我的数据库是postgresql版本7.4.3。

1 个答案:

答案 0 :(得分:2)

根据sql规范,缺少order by子句会产生一个未定义的顺序。如果您希望它们按照插入的顺序排列,则需要指定顺序(如果需要,可能使用额外的列)。

(从技术上讲,您看到的顺序是查询计划在物理上读取哪些行,这意味着订单受mvcc内部菜肴和您最终使用的特定计划的影响,这可能因桌子而异统计数据和你加入两个表格。)