序文 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のアップデートに関する簡単な説明
会議中に同僚から開発ライブラリを書き込めないとの報告を受けました。エラー メッセージは次のとおりでし...
この記事では、マウスの動きを追跡するためのJavaScriptの具体的なコードを参考までに紹介します...
この記事では、jQueryツリービューツリー構造のアプリケーションコードを例として紹介します。具体的...
1. 概要ユーザーは、アクセスする Web アプリケーションがインタラクティブでスムーズに実行される...
本日のプロジェクト最適化中に、MySQL に問題が発生しました: 定義者として指定されたユーザー (...
序文ヒント: ここで、この記事に記録するおおよその内容を追加できます。例えば、人工知能の継続的な発展...
mysql のインストール情報を表示します。 #ps -ef | grep mysql usr/bi...
序文Index Condition Pushdown (ICP) は、MySQL 5.6 の新機能で...
1. Zabbixバックアップ [root@iZ2zeapnvuohe8p14289u6Z /]# ...
目次要件: 進行中のアクティビティ データを照会する次のSQLクエリは、上記の4つの要件を満たし、タ...
オプションに属性 selected = "selected" を追加すると、それ...
前回の記事では、クロステーブル更新について書きました。自分が書いた SQL を見たとき、自分がバカみ...
1. SQLExceptionの概要JDBC を使用してデータ ソース (この記事のデータ ソースは...
この記事では、Docker+Jenkins の自動ビルドデプロイメントを紹介し、皆さんと共有します。...
次のように、Win10でMysqlの解凍バージョンをインストールします。環境: win10 64ビッ...