[Seasar-user:16118] Re: [S2JDBC] innerJoin と leftOuterJoin で同じ Entity を指定したい

kubo [E-MAIL ADDRESS DELETED]
2008年 10月 27日 (月) 04:18:33 JST


久保(jflute)です。

> 等価ではありますが、パフォーマンス面を考えると、
> 意図は明確なのかもしれませんが、副問い合わせという選択は微妙に思えます。
> (最近のRDB事情に詳しくないので、的を得てない言及だったらごめんなさい。)

こちらの件だけコメントします。
DBによっても変わるし状況次第で変わるので、
どっちが微妙ってことはないと思います。
個人的な経験則でいえば、基点テーブルが別の条件で
ある程度絞られるパターンであれば、existsの相関サブクエリは
かなりの安定したパフォーマンスを得てました。
(子テーブルが膨大な件数であっても)

また、相関サブクエリの副問い合わせなのか、そうでない
副問い合わせなのかは、全然別の実行計画になる可能性が
ありますので(つまり全然別の問い合わせ方法である)、
パフォーマンス的な議論する時には、一言で「副問い合わせ」と
くくれないので注意が必要です。

2008/10/27 Shotaro Tsubouchi <[E-MAIL ADDRESS DELETED]>:
> ショータローこと坪内です。
>
>> SQL としてはどちらも等価ですが,意図が明瞭なのは
>> こちらだと思います.
>
> 等価ではありますが、パフォーマンス面を考えると、
> 意図は明確なのかもしれませんが、副問い合わせという選択は微妙に思えます。
> (最近のRDB事情に詳しくないので、的を得てない言及だったらごめんなさい。)
>
>
>> この例は結合さえできれば後は用がないので
>> それで済みますが,結合できた後に他の結合も
>> 含めた選択条件が必要になると無理が出てきます.
>>
>> まぁ,AutoSelect で扱える範囲を少し広げるだけと
>> 割り切れば,フェッチしない結合は重複を許し,
>> WHERE では使えないとするのは悪くないのですが,
>> 現在はフェッチしない結合を WHERE で扱えているので,
>> 無条件に WHERE で使えなくすると既存のコードが
>> 動かなくなり,重複した時だけ使えなくすると
>> いかにも落とし穴になりそうです.
>
> すみません、ここのくだりが良くわかっていません。
>
> フェッチしない結合を WHERE で扱えている、というのは、
> これは、タイプセーフな記述ではないが、扱うことは可能という事でしょうか?
> であるとするならば、そうなのでしょうが、残念ながら魅力に欠けるように思います。
> 逆に言えば、タイプセーフで記述できる事にかなりの魅力を感じている、と言うことです。
> (何でもかんでもタイプセーフで実現できるようにとは思っていませんが、
> その線引きはどこだ?というのも難しい問題だとは思います。。)
>
> 今でも WHERE でやろうと思えばやれるが、
> JOIN でなら、重複さえ許せばタイプセーフでそのまま実現できるのではないか?
> ということが私の言いたいことです。
> (このことが全体的なパフォーマンス劣化に如実に影響するということなのであれば。
> 無理強いはしません。)
>
> これを許してしまうと、
> WHERE で使えなくなったり、重複した時に使えなくなったりする、というのは
> どういう場合なのでしょうか?
>
>
>> 違いますよ.この例は本当に結合の条件です.
>> サラリーが 1000 より多い従業員だけを結合するので,
>>
>> ID = 1 の部分だけを選択条件と書いたのではなく,
>> その結合全体が選択条件だと書いたのです.
>
> "部署に所属する、サラリーが 1000 より多い従業員"だと、
>
> jdbcManager.from(Department.class)
>    .leftOuterJoin("employee", "employee.salary > ?", 1000)
>    .getResultList();
>
> こうで、"サラリーが 1000 より多い従業員、を含む部署"だと、
>
> jdbcManager.from(Department.class)
>    .innerJoin("employee", "employee.salary > ?", 1000)
>    .getResultList();
>
> このようになると思いますが、leftOuterJoin なのであれば結合条件だけど、
> innerJoin であるならば選択条件でしょ、ということですね。
> そこは理解できましたが、その厳密性って必要and重要、、でしょうか?
>
>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


Seasar-user メーリングリストの案内