sql >> データベース >  >> RDS >> Sqlserver

左結合が多すぎるのはコードの匂いですか?

    一部の設計では、これは完全に正当なソリューションです。

    Customer のような 1 対多の関係の階層があるとします。 - Order - Basket - Item - Price など、どのレベルでも未記入の可能性があります:Customer Orderがない可能性があります 、Order Basketを持たないことはできません など

    この場合、次のようなものを発行します:

    SELECT  *
    FROM    Customer c
    LEFT OUTER JOIN
            Order o
    ON      o.CustomerID = c.ID
    LEFT OUTER JOIN
            Basket b
    ON      b.OrderID = c.ID
    …
    

    場合によっては非効率的であり、 EXISTS に置き換えられる可能性があることに注意してください または NOT EXISTS (対応するレコードが存在するか、他のテーブルに存在しないかだけを把握したい場合)。

    パフォーマンスの詳細については、私のブログのこの記事を参照してください:



    1. MySQLのロックの粒度を理解する

    2. 場所の変更による合計時間

    3. 以前の記録情報を取得する方法

    4. MySQL5.7.17の起動ログに[注]ユーザー「UNKNOWN_MYSQL_USER」のアクセスが拒否されました