PostgreSQLがクエリを簡略化する方法を理解しようとしています。つまり、2つのテーブル(「tb_thing」と「tb_thing_template」)を持ち、それぞれがテンプレートを指し、このようなクエリ:選択された列に基づいて簡素化をクエリする
EXPLAIN SELECT
tb_thing.id
FROM
tb_thing,
tb_thing_template
WHERE
tb_thing_template.id = tb_thing.template_id
;
これが結果です:私はちょうど「tb_thing_template」から「tb_thing」とnothingから一つのフィールドを選択していた場合でも
QUERY PLAN
---------------------------------------------------------------------------------
Hash Join (cost=34.75..64.47 rows=788 width=4)
Hash Cond: (tb_thing.template_id = tb_thing_template.id)
-> Seq Scan on tb_thing (cost=0.00..18.88 rows=788 width=8)
-> Hash (cost=21.00..21.00 rows=1100 width=4)
-> Seq Scan on tb_thing_template (cost=0.00..21.00 rows=1100 width=4)
プランナーは、2つのテーブルを結合しています。私はプランナーが実際に "tb_thing_template"テーブルに参加する必要はないことを理解するのに十分なほどスマートであることを期待していました。なぜなら、私はそこから何も選択していないからです。
どうして結合するのですか?クエリが計画されているときに列の選択が考慮されないのはなぜですか?
ありがとうございます!
しかし、**あなたは**参加しています。 **暗黙的な結合**クエリプランナーは、実行依頼したことを行っています。 – e4c5