MySQL の最適化: サブクエリの代わりに結合を使用する

MySQL の最適化: サブクエリの代わりに結合を使用する

サブクエリの代わりにJOINを使用する

MySQL はバージョン 4.1 以降で SQL サブクエリをサポートしています。この手法では、SELECT ステートメントを使用して単一列のクエリ結果を作成し、その結果を別のクエリのフィルター条件として使用します。たとえば、顧客基本情報テーブルに注文がない顧客を削除する場合は、次に示すように、サブクエリを使用して、まず販売情報テーブルから注文したすべての顧客の顧客 ID を取得し、その結果をメインクエリに渡すことができます。

顧客情報から削除 
WHERE CustomerID が含まれない (SELECT CustomerID FROM salesinfo) 

サブクエリを使用すると、論理的には複数のステップを一度に完了する必要がある多くの SQL 操作を一度に完了できるだけでなく、トランザクションまたはテーブル ロックを回避でき、記述も簡単になります。ただし、場合によっては、サブクエリをより効率的な JOIN に置き換えることができます。たとえば、注文記録がないすべてのユーザーを取得したい場合、次のクエリを使用して完了できます。

顧客情報から*を選択 
WHERE CustomerID が含まれない (SELECT CustomerID FROM salesinfo) 

このクエリを完了するために JOIN を使用すると、速度が大幅に向上します。特に、salesinfo テーブルの CustomerID にインデックスがある場合は、パフォーマンスが向上します。クエリは次のようになります。

顧客情報から*を選択 
LEFT JOIN salesinfoON customerinfo.CustomerID=salesinfo。 
顧客ID 
salesinfo.CustomerID が NULL の場合 

JOIN.. は、MySQL がこの論理的な 2 段階のクエリを完了するためにメモリ内に一時テーブルを作成する必要がないため、より効率的です。

要約する

サブクエリの代わりに結合を使用した MySQL の最適化に関するこの記事はこれで終わりです。参考用です。不備があれば指摘してください。誰でも意見を交換したり議論したりすることができます。このサイトをサポートしてくださった友人の皆さんに感謝します。

以下もご興味があるかもしれません:
  • MySQLの自己接続と結合の詳細な理解
  • MySQL の複数の左結合クエリの使用状況の分析
  • MySQL クエリの最適化: 結合クエリのソート制限の概要 (結合、順序、制限ステートメント)
  • MySQL で JOIN ステートメントを使用して接続操作を実行する詳細なチュートリアル
  • MySQL 結合クエリの原則の知識ポイント
  • MySQL 結合クエリ構文と例
  • MySQLでよく使用されるいくつかの結合接続方法の概要

<<:  js キャンバスで円形の水のアニメーションを実現

>>:  Linux の chown コマンドと chmod コマンドの違いの詳細な説明

推薦する

JavaScript を使用してソートアルゴリズムを実装する方法

目次バブルソート選択ソート挿入ソート要約するバブルソートバブルソートは、シーケンスの右側から始めて、...

Vue はスクロール可能なポップアップウィンドウ効果を実装します

この記事では、スクロール可能なポップアップウィンドウ効果を実現するためのVueの具体的なコードを参考...

Mybatisの各SQL文の実行時間の統計

背景最近、面接でデータベース トランザクションについてよく質問されます。通常は、@Transacti...

Vue SPA ファースト スクリーン最適化ソリューション

目次序文最適化ソ連オンデマンドインポート1. ルーティングファイルでコンポーネントをオンデマンドでイ...

4つのファイル拡張子 .html、.htm、.shtml、.shtm の違い

ウェブページを作り始めたばかりの友人の多くは、拡張子が非常に多いことに気づきます。実際、htm と ...

Tomcat は、Springboot プロジェクトの WAR パッケージの起動時にエラーを報告します: 子の起動時にエラーが発生しました

今日、会社の Springboot プロジェクトは、テストのためにテスト サーバーにデプロイする準備...

Linux におけるゼロコピー技術の使用に関する簡単な分析

この記事では、Linux におけるいくつかの主要なゼロコピー テクノロジと、ゼロコピー テクノロジを...

MySQL 5.7 の同時レプリケーションにおける暗黙のバグの分析

序文当社の MySQL オンライン環境のほとんどはバージョン 5.7.18 を使用しています。このバ...

異なる列を持つテーブルのクエリ結果のSQLマージ操作

2 つの異なるテーブルをクエリするには、結果をマージする必要があります。たとえば、table1 の列...

サーバーの購入と初期構築方法

しばらくサーバーいじってなかったけど、やることがなくなったのでモバイルワークスに行って海外サーバーを...

Linux LVM 論理ボリューム構成プロセス (作成、増加、削減、削除、アンインストール) の詳細な説明

Linux LVM論理ボリューム構成プロセスの詳細な説明多くの Linux ユーザーは、オペレーティ...

UbuntuにProtobuf 3をインストールするための詳細なチュートリアル

いつインストールするかprotoc コマンドを使用しても Protoc が見つからない場合は、インス...

Nginx を使用してクロスドメイン Vue 開発環境を処理する方法

1. 需要正しい Cookie 配信と SSO テストを確実に実行できるように、ローカル テスト ド...

Html+CSS フローティング広告ストリップの実装

1.html部分コードをコピーコードは次のとおりです。 <!DOCTYPE html> ...

Docker は次の「Linux」になれるか?

Linux オペレーティング システムは過去 20 年間にわたってデータ センターに革命をもたらし...