我对特定查询的结果有疑问。
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。
答案 0 :(得分:2)
根据sql规范,缺少order by
子句会产生一个未定义的顺序。如果您希望它们按照插入的顺序排列,则需要指定顺序(如果需要,可能使用额外的列)。
(从技术上讲,您看到的顺序是查询计划在物理上读取哪些行,这意味着订单受mvcc内部菜肴和您最终使用的特定计划的影响,这可能因桌子而异统计数据和你加入两个表格。)