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

子がない場合にのみ親行を選択します

    SELECT id FROM A LEFT OUTER JOIN B ON A.id=B.id WHERE B.id IS NULL
    

    あなたはこれを行うことができます。外側の結合は少しパフォーマンスをもたらすはずですが、それほどではありません。

    新しいデータベースシステムは、おそらくクエリを最適化して、違いがないようにします。

    ここでの正しい方法はキャッシングです!可能であれば、クエリキャッシャーとアプリケーションレベルのキャッシュを試してください。

    もちろん、適切なインデックスが必要です。

    そして、適切には、両方のテーブル、できればハッシュインデックスを意味します。これは、対数を持つツリーと比較して静的なルックアップ時間が発生するためです。

    クエリの前に説明を入れて、これが実際に遅くなる原因を確認してください。

    これを本当に高速にする必要がある場合は、データ構造を再構築できます。

    テーブルbeに対応するエントリがあるかどうかに関係なく、テーブルAにフラグをマークするトリガーを作成できます。もちろん、このIDデータの冗長性はありますが、それだけの価値がある場合もあります。キャッシングと考えてください。

    最後に考えたのは、SELECT id FROM A WHERE id NOT IN (SELECT id FROM B)を試すことです。 実際の結合が必要ないため、少し速くなる場合がありますが、一連のルックアップがフルスキャンになるため、遅くなる場合もあります。これがどのように処理されるかはよくわかりませんが、試してみる価値があるかもしれません。



    1. PHPを使用してMySQLデータベースに配列を挿入します

    2. PHPを使用してMySQLデータベースに大きなファイルを挿入するにはどうすればよいですか?

    3. Oracleのブールフィールド

    4. 除算(/)がpostgresqlで私の答えを与えていない