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 の書き込み効率が低い場合の解決策
目的: vuex で管理されている状態データを同時にローカルに保存できるようにします。独自のストレー...
導入Binlog ログ、つまりバイナリ ログ ファイルは、データベースに対するユーザー操作の SQL...
1. Webプロジェクトを作成したら、Tomcatを例にサーバーを構成する必要があります。 2. 実...
html <div class="スピナー"></div&g...
最新バージョンのMySQL 8.0.11をインストールした後、ユーザーを作成して認証します。認証され...
1. ディレクトリホワイトリストを設定する:指定されたリクエストパスに制限を設定しないでください。た...
Centos yumフォルダを開くコマンドcd /etc/yum.repos.d/を入力します。 w...
この記事では、テーブルのページング効果を実現するためのjQueryの具体的なコードを参考までに紹介し...
ゲームのソースコードのダウンロードアドレスを取得するためのJavaScript:クリックしてソースコ...
今日は、MySQL IN サブクエリの最適化に関するケーススタディを見ました。最初は少し懐疑的でした...
ページデータの表示には Vue などの js のデータバインディング機構が使用されるため、クローラー...
目次シンプルなSpringbootプロジェクトを作成する1. pom.xmlでSpring Boot...
序文SQL モードは、MySQL がサポートする SQL 構文と、実行されるデータ検証チェックに影響...
この記事ではMySQL 5.7.16のインストールと設定方法を記録します。具体的な内容は以下のとおり...
2次元配列の次元削減配列インスタンスメソッド concat と ES6 スプレッド演算子を使用した次...