序文 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のアップデートに関する簡単な説明
<br /> 特定の Web サイトを閲覧して、優れた Web ページを見つけた場合、そ...
IEでのRGBAとフィルター値の変換RGBA 透明度値IE フィルター値0.1 19 0.2 33 ...
目次メモを使うコールバックの使用メモを使う親コンポーネントが再レンダリングされると、そのすべての要素...
長い間ブログを書いていませんでした。先週、プロジェクトをテストしたところ、いくつかのバグが見つかりま...
文法:背景画像: 円錐グラデーション(位置の角度から、開始色、...、最後の色)最初のパラメータ:開...
Hexo は Windows 10 でカスタムドメイン名を GitHub にバインドしますまずドメイ...
この記事ではクラスタの展開に関連する内容は紹介しませんバージョン制約Docker エンジン >...
MySQL のイベント スケジューラ EVENT は、Unix crontab や Windows ...
概要実際のビジネス シナリオ アプリケーションでは、ビジネス条件に基づいて対象データを取得およびフィ...
前に書いた内容: ビジネス ロジックの判断を行うために、最新のトランザクション ID を表示する必要...
目次序文グローバルロック完全なデータベース論理バックアップFTWRL と set global re...
Vue ルーティング this.route.push ジャンプ ページが更新されない1. 背景概要:...
今日、slave_exec_modeというパラメータを偶然見ました。マニュアルの説明から、このパラメ...
操作効果: html <!-- この要素は表示されません。DOM は JavaScript に...
1. MySQLデータベースのユーザーテーブルのレコードのHostフィールド値を%に変更します。奇妙...