序文 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のアップデートに関する簡単な説明
join() メソッド: 指定された区切り文字を使用して配列内のすべての要素を文字列に接続します。例...
Safari (Technology Preview 106) および Firefox (バージョン...
HTML イベント リスト一般イベント: onClick HTML: マウスクリックイベント。主にオ...
win docker-desktopを使ってコンテナ開発に接続し、ネットワーク上で色々試してみたいと...
フロントエンドのデザイン案では、「X」や「>」の形をした閉じるボタンや、他の 3 方向の白抜き...
目次序文vue.config.js 構成オプションパッケージサイズを縮小するためのパッケージの最適化...
1. Busyboxのソースコードをオンラインでダウンロードしてください。コンパイル方法については、...
目次序文1. 概要2. 読み取りと書き込みの分離3. MySQL マスタースレーブレプリケーションの...
目次1. オペレーティングシステムとは何か2. Linuxの起源3. Linuxの基本機能4. Li...
目次関数フォーマットを即時実行関数を即座に実行する他の方法 – 式即時実行される関数はパラメータを取...
CSS3変数について変数を宣言するときは、変数名の前に 2 つのハイフン ( -- ) を追加します...
VMware12.0+Ubuntu16.04+MySQL5.7.22 インストールチュートリアルの詳...
主に低バージョンのブラウザ向け<!-- --> は HTML コメント タグです。上位バ...
ステップ1: サードパーティの信頼できるSSL証明書に署名するAlibaba Cloud で直接、無...
各テーブルの行数をカウントするために使用される MySQL count() 関数は、誰もがよく知って...