0

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

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。

4

1 回答 1

2

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

(从技术上讲,您看到的顺序是查询计划实际读取的行,这意味着该顺序取决于 mvcc 的内部美食和您最终使用的特定计划,这可能会因表统计信息和您的连接两个表。)

于 2013-10-03T10:56:31.160 回答