2016-05-10 6 views
1

:最初の変形では追加のAND項を含むSELECTは、それがない場合よりもどのように多くの行を生成できますか?私はこのようなクエリ実行しています

SELECT distinct me.* 
    FROM me 
    LEFT JOIN has_things ON has_things.me_id = me.id 
    LEFT JOIN has_refs ON has_refs.thing_id = has_things.thing_id 
    WHERE 
     has_refs.ref_id = 456 
     AND me.id=123; 

を、私は最後の行AND me.id = 123を省略し、第二の変形で、私はその行を含めると、1行を取得しながら、0行を取得します。

最後の行がAND me.id >= 123である別の変形では、私は0行を得る。

私はpsqlを使用してデータベースに問い合わせています。

私は何が欠けていますか?これをどのように修正できますか? 私はANDの条件で一致の数を減らすことができると思った。

このようなPostgreSQLのバグを知っている人は、行が消えたり消えたり、バグのチケットなどにリンクしている可能性がありますか?インデックスは、問題を修正し再作成
How can PDO not return a row which pg_query() does?

+2

どのデータ型が 'me.id'ですか?これを再現するための完全なテストセットアップを提供できますか?実行計画はその列の索引参照を表示しますか?はいの場合は、索引ヘルプを再作成しますか? –

+2

LEFT JOINとWHEREの残りの部分で行われている処理と組み合わせて使用​​される可能性があります。 –

+0

'me.id'は' serial NOT NULL'タイプです。負荷が低い夜間にインデックスを再作成します。実際のクエリでクエリを更新しましたが、同じ結果を生成しながら最小化することができました。私にとって、「JOIN」はまったく不利に見えます。 – Archimedix

答えて

0

は私の他の質問に関連らしいです。

今や、インデックスが壊れているか矛盾していることを検出して、自動的にインデックスを再作成する方法が不思議です。

+1

使用している**正確** Postgresのバージョンは何ですか? –

+0

最新の9.4バージョンは9.4.7で、9.4.2と9.4.7の間に多くのバグ修正がありましたので、現在のバージョンでこの動作が表示されない場合は驚かないでしょう。 [ホームページからの引用](http://www.postgresql.org/support/versioning/):*すべてのユーザーは、できるだけ早く最新のマイナーリリースにアップグレードする必要があります。アップグレードには常にリスクがありますが、PostgreSQLのマイナーリリースセキュリティやデータ破損のバグを修正するだけで、アップグレードのリスクを軽減することができます**コミュニティは*** " –

+0

をアップグレードするよりもリスクが高くなるとは考えていませんが、それは私の能力ではありません。 – Archimedix

関連する問題