MySQL 5.6 での union all のパフォーマンス パート 1:MySQL 5.6.25 [root@HE1 ~]# MySQL -uroot -p パスワードを入力してください: MySQL モニターへようこそ。コマンドは ; または \g で終わります。 MySQL接続IDは2です サーバーバージョン: 5.6.25-log MySQL コミュニティサーバー (GPL) Copyright (c) 2000, 2015, Oracle およびその関連会社。無断複写・転載を禁じます。 OracleはOracle Corporationおよびその関連会社の登録商標です。 その他の名称は各社の商標である場合があります。 所有者。 ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。 mysql> バージョンを選択します(); +------------+ | バージョン() | +------------+ | 5.6.25-ログ | +------------+ セット内1列(0.26秒) mysql> explain (select id from helei order by id) union all (select id from t where id=0 order by id); +----+--------------+------------+-------+---------------+---------+-------+------+-----------------+ | id | select_type | テーブル | タイプ | possible_keys | key | key_len | ref | 行 | 追加 | +----+--------------+------------+-------+---------------+---------+-------+------+-----------------+ | 1 | PRIMARY | helei | index | NULL | idx_c1 | 4 | NULL | 5219 | インデックスを使用 | | 2 | UNION | t | ALL | NULL | NULL | NULL | NULL | 1 | where の使用 | | NULL | UNION RESULT | <union1,2> | ALL | NULL | NULL | NULL | NULL | NULL | 一時を使用 | +----+--------------+------------+-------+---------------+---------+-------+------+-----------------+ セット内の 3 行 (0.00 秒) MySQL バージョン 5.6 では、実行結果は次の図のようになります。 実行プランから、helei テーブルと t テーブルのクエリ結果が一時テーブルにマージされ、クライアントに出力されます。 MySQL 5.7/MariaDB 10.1 での union all のパフォーマンス パート 1:MySQL 5.7.15 [root@HE1 ~]# mysql -uroot -p パスワードを入力してください: MySQL モニターへようこそ。コマンドは ; または \g で終わります。 MySQL接続IDは8です サーバーバージョン: 5.7.15-log MySQL コミュニティサーバー (GPL) Copyright (c) 2000, 2016, Oracle およびその関連会社。無断複写・転載を禁じます。 OracleはOracle Corporationおよびその関連会社の登録商標です。 その他の名称は各社の商標である場合があります。 所有者。 ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。 mysql> バージョンを選択します(); +------------+ | バージョン() | +------------+ | 5.7.15-ログ | +------------+ セット内の1行(0.00秒)、 mysql> explain (select id from helei order by id) union all (select id from t where id=0 order by id); +----+-------------+--------+-----------+---------+---------------+---------+--------+----------+-----------+-------------+ | id | select_type | テーブル | パーティション | タイプ | 可能なキー | キー | キー長 | ref | 行 | フィルター済み | 追加 | +----+-------------+--------+-----------+---------+---------------+---------+--------+----------+-----------+-------------+ | 1 | PRIMARY | helei | NULL | index | NULL | idx_c1 | 4 | NULL | 5212 | 100.00 | インデックスを使用 | | 2 | UNION | t | NULL | ALL | NULL | NULL | NULL | NULL | 1 | 100.00 | where の使用 | +----+-------------+--------+-----------+---------+---------------+---------+--------+----------+-----------+-------------+ セットに 2 行、警告 1 件 (0.00 秒) MySQL バージョン 5.7 では、実行結果は次の図のようになります。 パート 2: MariaDB 10.1.16 [root@HE3 ~]# /usr/local/mariadb/bin/mysql -uroot -S /tmp/mariadb.sock MariaDB モニターへようこそ。コマンドは ; または \g で終わります。 MariaDB接続IDは7です サーバーバージョン: 10.1.16-MariaDB MariaDB サーバー Copyright (c) 2000、2016、Oracle、MariaDB Corporation Ab およびその他。 ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。 MariaDB [(なし)]> MariaDB [helei]> explain (select id from helei order by id) union all (select id from t where id=0 order by id); +------+-------------+-------+-------+---------------+---------+-------+------+------------+ | id | select_type | テーブル | タイプ | possible_keys | key | key_len | ref | 行 | 追加 | +------+-------------+-------+-------+---------------+---------+-------+------+------------+ | 1 | PRIMARY | helei | index | NULL | idx_c1 | 4 | NULL | 5198 | インデックスを使用 | | 2 | UNION | t | ALL | NULL | NULL | NULL | NULL | 1 | where の使用 | +------+-------------+-------+-------+---------------+---------+-------+------+------------+ セット内の 2 行 (0.00 秒) MariaDB10.1 では、実行結果が次の図のように表示されます。 実行結果から、MySQL 5.7 も MariaDB 10.1 も一時テーブルを作成しないことがわかります。順番としては、まず helei テーブルのクエリ結果がクライアントに出力され、次に t テーブルのクエリ結果がクライアントに出力されます。 この記事の最適化は union all のみを対象としており、最外層の union および order by には効果がありません。次の図に示すように: --要約-- MySQL 5.7/MariaDB 10.1 では、union all は一時テーブルを作成しなくなり、union クエリ中の I/O オーバーヘッドが削減されます。この機能は MySQL 5.5/5.6 では使用できません。 上記は、MySQL5.7 での union all の使用方法を理解するために 5 分で紹介したブラック テクノロジーです。お役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
<<: CentOS7でPHPスケジュールタスクを実行する方法
>>: AIX マウント NFS の書き込み効率が低い場合の解決策
Win10 システムでの MySQL 8.0.20 のインストールと設定の超詳細なチュートリアルMy...
目次1. はじめに2. 詳しい説明2.1、非同期2.1.1. 関数はPromise以外のオブジェクト...
目次1. はじめに2. ソリューションの実装2.1 実装コード2.2 コードの説明2.3 検証結果1...
1. Webプロジェクトを作成したら、Tomcatを例にサーバーを構成する必要があります。 2. 実...
かなり前に仮想マシンをインストールしましたが、ようやく Linux をインストールしました。マシンの...
1. 以前 QT5.13 バージョンをダウンロードしましたが、インストール後、Qtcreator を...
フォームを作成するときに、名前、携帯電話番号、出生地などの 2 つのフィールドを揃える状況に遭遇する...
Raspberry Pi 3B に 64 ビット アプリケーション (64 ビット JDK など) ...
コードを見てみましょう:コードをコピーコードは次のとおりです。 < !DOCTYPE html...
背景開発プロセス中に Docker コンテナ化をサポートするために、通常は Maven を使用してコ...
では、早速リソースについて見ていきましょう。 123WORDPRESS.COM ダウンロードSQLy...
HTML タグには、ページのタイトルを処理するための特別なタグがあります。これらは h1、h2、h3...
イベントとは、クリック、マウスオーバー、ページの読み込み後にトリガーされる読み込みイベントなど、ユー...
Linux システムのネットワーク接続を構成するのは難しい場合があります。幸いなことに、多くの新しい...
この記事の例では、VUEコンポーネントに基づいて都市リストエフェクトを実装するための具体的なコードを...