序文 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のアップデートに関する簡単な説明
この記事では、MySQL 5.7 zipアーカイブ版のインストールチュートリアルを参考までに紹介しま...
この記事では、動的な点と線の効果を実現するためのJavaScriptキャンバスの具体的なコードを参考...
前提条件gitをインストールする必要があるインストール手順1. リモートリポジトリからpyenvをク...
目次背景1. 思考分析2. ページ構成2.1 HTML レイヤー2.2 CSS レイヤー2.3 JS...
mysql5.7.18の解凍版はmysqlサービスを起動します。具体的な内容は以下のとおりです。 1...
1. mysql tar ファイルをダウンロードします。参考: 2. インストールパッケージがあるデ...
序文var は ES5 における変数宣言方法です。var で変数を宣言するとループ変数がグローバル変...
以前、あるプロジェクトでMysql FIND_IN_SET関数を使用したことがありますが、非常に便利...
Vue 言語と要素コンポーネントを使用して、コード コンテンツの入力を必要とし、ハイライト表示が可能...
MQTT プロトコルMQTT (Message Queuing Telemetry Transpo...
最近 CSS を勉強していたとき、 2 つの CSS プロパティだけを使用して全画面スクロール効果を...
目次例方法1: 削除方法2: 分解補充する要約するThinking シリーズは、10 分で実用的なプ...
コードをコピーコードは次のとおりです。 <input type="text"...
この記事では、主に次のような Vue ドラッグ アンド ドロップの簡単な実装を紹介します。レンダリン...
目次背景提供/注入共有状態の抽出データを提供するデータの挿入まとめ反応的な共有状態の抽出共有状態の使...