序文 MySQL では、複数テーブル結合クエリは非常に一般的な要件です。複数テーブルクエリを使用する場合、複数のテーブルから使用したり、結合を使用して複数のテーブルに接続したりできます。 これら 2 つのクエリの違いは何でしょうか? どちらのクエリの方が効率的でしょうか? これらの疑問から、試してみることにしました。 1. まずローカルのMySQLにテーブル1と2を作成します 1つのテーブル テーブル `one` を作成します ( `id` int(0) NOT NULL AUTO_INCREMENT, `one` varchar(100) NOT NULL, 主キー (`id`) )エンジン = InnoDB 文字セット = utf8; 2つのテーブル テーブル `two` を作成します ( `id` int(0) NOT NULL AUTO_INCREMENT, `two` varchar(100) NOT NULL, 主キー (`id`) )エンジン = InnoDB 文字セット = utf8; まず、いくつかのデータを挿入して確認します。 one.id=two.id の場合、one、two から one.id、one.one、two.id、two.two を選択します。 one から one.id、one.one、two.id、two.two を選択し、one.id=two.id で 2 つを結合します。 2 つのクエリを比較すると、クエリ時間にほとんど違いはありません。SQL 実行分析を確認しても違いはありません。 2 つのクエリのパフォーマンスの違いを強調するために、テーブル 1 に 100 万件のレコードを挿入し、テーブル 2 に 10 万件のレコードを挿入します。大量のデータがあると、わずかな違いも際限なく拡大されます。それでは、違いを比較してみましょう。 まず、Pythonを使ってデータベースにデータを挿入します。なぜPythonを使うのか?Pythonはシンプルなコードを書くからです。 コードについて pymysqlをインポートする db = pymysql.connect("127.0.0.1", 'root', "123456", "bruce") カーソル = db.cursor() sql = "1つの値(%s)にINSERT INTO" iが範囲(1000000)内にある場合: カーソル.executemany(sql、['one' + str(i)]) i % 10000 == 0 の場合: コミット() print(str(i) + 'コミット') コミット() print('挿入OK') sql2 = "2つの値(%s)にINSERT INTO" iが範囲(100000)内にある場合: カーソル.executemany(sql2, ['two' + str(i)]) i % 10000 == 0 の場合: コミット() print(str(i) + 'コミット') コミット() print('2つ挿入OK') 挿入にはしばらく時間がかかりますので、しばらくお待ちください。 データが挿入されたら、クエリしてみましょう まず2つのテーブルからクエリを実行します one.id=two.id の場合、one、two から one.id、one.one、two.id、two.two を選択します。 約20.49秒かかります。 JOINクエリをもう一度使ってみましょう one から one.id、one.one、two.id、two.two を選択し、one.id=two.id で 2 つを結合します。 19.45秒かかりました。10万件のデータの中で、1秒の誤差は大した問題ではありません。 条件制約としてIDを使用する場合のクエリを見てみましょう クエリ時間には違いはありません。SQL実行分析を見てみましょう。 結果は同じだ 要約する MySQL では、FROM を使用して複数のテーブルをクエリする場合と、JOIN 接続 (LEFT JOIN と RIGHT JOIN を除く) を使用する場合のクエリ結果とクエリ効率は同じです。 さて、以上がこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM をご愛顧いただきありがとうございます。 以下もご興味があるかもしれません:
|
<<: CentOS6.5 でファイル共有サービス Samba を構築するチュートリアル
>>: React Native APPのアップデートに関する簡単な説明
Traceroute を使用すると、情報がコンピュータからインターネットの反対側のホストまでたどるパ...
まず、Docker がインストールされたサーバーが必要です。 (私はすでにこれをサーバーにインストー...
最初のタイプ: 完全な CSS コントロール、レイヤーフローティング (ログインページに適しています...
次の図に示すように: 仮想マシンと Docker を使用するとき、「なぜ Docker は VM よ...
MySQL ステートメントの書き込み順序と実行順序には大きな違いがあります。書き順、mysql の一...
1. ソフトウェアをダウンロードする1. MySQL の公式サイトにアクセスし、Oracle アカ...
データベース SQL の最適化はよくある問題です。何百万ものデータ ボリュームに対してページング ク...
1. CSSスタイルは、テキストが長すぎる場合に省略記号を表示する問題を解決します1. 一般的なスタ...
textarea タグはよく使われる HTML タグです。主に長いテキストを入力するときに改行するた...
SVG (Scalable Vector Graphics)は、XML 構文に基づいた画像形式です。...
vuexとはvuex: vue.js専用に開発された状態管理ツールで、すべてのコンポーネントの状態を...
プロジェクトを構築する対応するパスでコマンドラインを実行します: react-native init...
リアルタイム レプリケーションは、企業データをバックアップする最も重要な方法です。主に、ユーザーが送...
コンテナを通じてローカル パブリック IP アドレスを取得します。ローカル IP アドレスを使用して...
目次落とし穴充填方法何の穴ですか?要約する落とし穴最近、仕事で商品の割引価格を計算すると、いつも1セ...