0

特定のクエリの結果について疑問があります。

SELECT final_copy,num_chars FROM table1 t1,table2 t2

WHERE t1.numid = t2.id

このクエリで 2 つの行を取得すると、

final_copy | num_chars

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

     1 | 1272
       | 1075

ここで、final_copy 1 は挿入された最新のレコードです。このクエリはループで実行され、一貫して最初の行で final_copy が 1 のレコードを常に返します。ご覧のとおり、クエリは「order by」を使用していませんでした。

しかし、現在、クエリ結果に一貫性がありません。つまり、最後の挿入日に基づいて行が返されません。

私の疑問は、バキュームまたは再インデックス時にクエリ結果の動作が変わる可能性があるということです。先週、これらのテーブルの再インデックスとバキュームを行いました。それによって結果の動作が変わりますか?

私のデータベースは postgresql バージョン 7.4.3 です。

4

1 に答える 1

2

order byがないと、SQL 仕様に従って、未定義の順序が生成されます。挿入された順序で並べたい場合は、順序を指定する必要があります (必要に応じて追加の列を使用する可能性があります)。

(技術的には、表示されている順序は、クエリの計画によって行が物理的に読み取られる順序です。つまり、順序は、mvcc の内部料理と、最終的に使用する特定の計画の両方の影響を受けます。これは、テーブルの統計とあなたの2 つのテーブルを結合します。)

于 2013-10-03T10:56:31.160 に答える