序文 MySQL 8.0 の最新バージョンは 8.0.4 rc であり、正式版は近日中にリリースされる予定です。この記事では、リレーショナル データベースの 8.0 の主要な新機能をいくつか紹介します。 MySQL はバージョン 5.7 から NoSQL ストレージ機能を提供しており、この機能も 8.0 で改善されたことはすでにご存知かもしれません。ただし、これは実際にはほとんど使用されておらず、私も使用したことがないため、この記事ではこの側面を紹介せず、リレーショナル データベースの側面に焦点を当てます。 1. 隠しインデックス 隠しインデックス機能は、パフォーマンスのデバッグに非常に役立ちます。 8.0 では、インデックスを「非表示」および「表示」できます。インデックスが非表示の場合、クエリ オプティマイザーでは使用されません。 つまり、インデックスを非表示にして、データベースへの影響を観察することができます。データベースのパフォーマンスが低下した場合は、インデックスが有用であることを意味するため、「表示に戻す」ことができます。データベースのパフォーマンスが変化していない場合は、インデックスが冗長であるため、削除できます。 インデックスを非表示にする構文は次のとおりです。 ALTER TABLE t ALTER INDEX i INVISIBLE; インデックスを復元するための構文は次のとおりです。 ALTER TABLE t ALTER INDEX i VISIBLE; インデックスが非表示になっている場合、show index コマンドの出力から、インデックスの Visible プロパティ値が NO であることがわかります。 注:インデックスが非表示の場合でも、その内容は通常のインデックスと同様にリアルタイムで更新されます。この機能は、最適化とデバッグ専用です。インデックスを長期間非表示にしている場合は、インデックスの存在が挿入、更新、削除のパフォーマンスに影響を与えるため、インデックスを削除することをお勧めします。 2. 持続性を設定する MySQL 設定は、SET GLOBAL コマンドを使用して実行時に変更できますが、この変更は一時的なものであり、データベースは次回起動時に構成ファイルを再度読み取ります。 MySQL 8 では SET PERSIST コマンドが追加されました。例: SET PERSIST max_connections = 500; MySQL は、このコマンドの設定をデータ ディレクトリの mysqld-auto.cnf ファイルに保存します。次回起動時に、このファイルを読み取り、その中の設定を使用してデフォルトの設定ファイルを上書きします。 3. UTF-8エンコード MySQL 8 以降、データベースのデフォルトのエンコーディングは、すべての絵文字を含む utf8mb4 に変更されます。長年にわたり、デフォルトのラテン語の変更を忘れて文字化けが発生することを恐れて、MySQL を使用する際のエンコードには細心の注意を払ってきました。これからは心配する必要はありません。 4. 共通テーブル式 複雑なクエリでは埋め込みテーブルが使用されます。例: t1.*、t2.*を選択します (テーブル1から列1を選択) t1、 (テーブル2からcol2を選択) t2; CTE を使用すると、次のように記述できます。 と t1 AS (テーブル1から列1を選択) t2 AS (テーブル2から列2を選択) t1.*、t2.*を選択します。 t1、t2から; こうすることで、レイヤーと領域がより明確に表示され、どの部分を変更すればよいかがより明確にわかるようになります。 CTE の詳細については、公式ドキュメントを参照してください。 5. ウィンドウ関数 MySQL で最も不満の多かった機能の 1 つは、rank() 関数がないことです。クエリでランキングを実装する必要がある場合は、@ 変数を手動で記述する必要があります。ただし、MySQL 8.0 以降では、ウィンドウ関数と呼ばれる新しい概念が追加され、これを使用していくつかの新しいクエリ メソッドを実装できるようになりました。 ウィンドウ関数は、SUM() や COUNT() などの集計関数に少し似ていますが、クエリ結果の複数行を 1 行に結合するのではなく、結果を複数の行に戻します。つまり、ウィンドウ関数では GROUP BY は必要ありません。 「クラスの生徒数」の表があるとします。 mysql> クラスから * を選択します。 +--------+------------+ | 名前 | 生徒数 | +--------+------------+ | クラス1 | 41 | | クラス2 | 43 | | クラス3 | 57 | | クラス4 | 57 | | クラス5 | 37 | +--------+------------+ セット内の行数は 5 です (0.00 秒) クラスのサイズを小さいものから大きいものの順にランク付けしたい場合は、次のようにウィンドウ関数を使用できます。 mysql> select *, rank() はクラスから `rank` でした -> ウィンドウは (stu_count による順序) でした。 +--------+-----------+------+ | 名前 | 生徒数 | 順位 | +--------+-----------+------+ | クラス5 | 37 | 1 | | クラス1 | 41 | 2 | | クラス2 | 43 | 3 | | クラス3 | 57 | 4 | | クラス4 | 57 | 4 | +--------+-----------+------+ セット内の行数は 5 です (0.00 秒) ここでは、w という名前のウィンドウを作成し、それを stu_count フィールドをソートするように指定し、select 句で w に対して rank() メソッドを実行して、結果を rank フィールドとして出力します。 実際、ウィンドウの作成はオプションです。たとえば、各行に生徒の総数を加算したい場合は、次のようにします。 mysql> * を選択し、(stu_count) を total_count として合計します。 -> クラスから; +--------+-----------+-------------+ | 名前 | 生徒数 | 合計数 | +--------+-----------+-------------+ | クラス1 | 41 | 235 | | クラス2 | 43 | 235 | | クラス3 | 57 | 235 | | クラス4 | 57 | 235 | | クラス5 | 37 | 235 | +--------+-----------+-------------+ セット内の行数は 5 です (0.00 秒) これをやる意味は何ですか?この方法で、各クラスの生徒の割合を一度に知ることができます。 mysql> *を選択、 -> (stu_count)/(sum(stu_count) over()) をレートとして -> クラスから; +--------+-----------+---------+ | 名前 | スタッカウント | レート | +--------+-----------+---------+ | クラス1 | 41 | 0.1745 | | クラス2 | 43 | 0.1830 | | クラス3 | 57 | 0.2426 | | クラス4 | 57 | 0.2426 | | クラス5 | 37 | 0.1574 | +--------+-----------+---------+ セット内の行数は 5 です (0.00 秒) 以前は、これは長くてわかりにくい段落を書くことによってのみ達成できました。ウィンドウ関数の詳細については、こちらをご覧ください。 いかがでしょうか?上記の紹介を読んで、MySQL 8.0 にさらに期待が持てるようになりましたか? 要約する 上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。 以下もご興味があるかもしれません:
|
<<: Vueはタブを切り替えてデータの状態を維持する3つの方法を実装します
>>: Ansibleを使用してディレクトリ内のすべてのコンテンツを削除する方法
指令とは何ですか? Angular と Vue はどちらもディレクティブの概念を持っており、これは通...
夜にMACの電源を入れたところ、突然ルートアカウントがMySQLに正常にログインできなくなったため、...
Robots.txt はプレーンテキスト ファイルであり、Web サイト管理者は、ロボットによるアク...
webpack-dev-server コアコンセプトWebpack の ContentBase と ...
1: MySqlをダウンロードする公式サイトのダウンロードアドレス: https://dev.mys...
背景Tencent Linux クラウド ホストがあり、その上に Docker (ServiceDo...
目次序文こんにちは世界画像 境界線の半径を設定する実ピクセルを設定する外部CSSをインポートttfフ...
従来の Linux イメージで作成された ECS クラウド サーバーには、NTP と YUM が設定...
目次セーフモード設定テスト1. where句なしで更新および削除する2. 非インデックスキーの削除3...
序文最近、小さなプログラムでリアルタイムにチャートを更新するという要件に遭遇しました。最初は wx-...
この記事の例では、円形のプログレスバーのドラッグアンドスライドを実現するための具体的なJSコードを紹...
質問まず、私が遭遇した問題についてお話しします。まず、そういった需要があるわけです。フロントエンドは...
序文最近 Linux を学び、その後 Win から Ubuntu に変更しました。以前インストールし...
本日、開発中に、顧客からページをキャッシュしないように要求される方法に遭遇しました。調べたところ、ペ...
データベーステーブルA: テーブル task_desc_tab を作成します ( id INT(11...