ホームページ  >  記事  >  バックエンド開発  >  200 万レベルのデータ テーブル、結合クエリに関する問題

200 万レベルのデータ テーブル、結合クエリに関する問題

WBOY
WBOYオリジナル
2016-06-13 13:41:081847ブラウズ

200 万レベルのデータ テーブル、結合クエリ問題
2 つのデータ テーブル A と B。
テーブル A と B には 2 つのフィールドがあります: EXP_CODE ,CODE;
次に、EXP_CODE フィールドが 'R8_002_XZ に等しく、EXP_CODE とは異なるレコードを検索します。次のステートメントを使用します。 2 つのテーブル EXP_CODE が数万件記録されている場合、コンピュータは基本的にフリーズします。ましてや数百万件に達した場合はなおさらです。改善方法を教えてください。

select * from a where EXP_CODE= 'R8_002_XZ ' and code not in (select code from b)


------解決策---- - ---------------
EXP_CODE= 'R8_002_XZ ' の a から * を選択し、含まれていないコード (b からコードを選択)

== = ================================================= ==

select * from a left join b on a.code=b.code
where a.EXP_CODE= 'R8_002_XZ ' and b.code is null

また会いましょうコードにインデックスはありますか? ない場合は、exp_code に

も作成します。
------解決策-----
2階の正しい解決策ですが、数百万のレコードを対象としています。データベースはまだ遅いので、limit を使用して制限できます。
------解決策---------
select * from a where exp_code= 'r8_002_xz ' およびコードが存在しません(select code from b where exp_code!= 'r8_002_xz ')
上記の構文にはいくつかの問題がある可能性がありますが、論理関係は正しいはずです。
要件: バージョン> 4.1、サブクエリをサポートします。
------解決策---------
これがご希望ですか
から * を選択してくださいa.code=b.code および a.EXP_CODE=b.EXP_CODE
で b を左結合します。ここで、a.EXP_CODE= 'R8_002 ' および b.code は null


------解決策----------------------
ネストされた選択は効率が低いため、内部結合を使用してみてください、代わりに結合を残します
------解決策-----
上記は間違っています。
select * from a where exp_code= 'r8_002_xz ' and code not in(select code from b where exp_code!= 'r8_002_xz ');
または
select * from a where exp_code= 'r8_002_xz ' and not in存在します (exp_code!= 'r8_002_xz ' および a.code=b.code からコードを選択します);



------解決策------
コード a の左結合 b から * を選択します。 =b.code および a.EXP_CODE=b.EXP_CODE および b.code は null

a にはあるが b には存在しないレコードを検索し、b の構造に従ってそれらを追加するだけで済みます。 !

お疲れ様です、私たちも一緒です!

------解決策-----ははは...遭遇しました。 ..

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。