今日は、Auroraでは味わえないMySQL 8.0のワクワク要素の日。
目次
とある日
Twitterを見ていて、とあるツイートが目に入った。
Aurora 勧められること多いけど、MySQL 8.0 の方がわくわくするじゃん
— ゆうあん⋈ (@yuuAn) 2021年8月4日
まさか、同じことを考えていた方がこの世に存在したとは。
このわくわくを世に広めるためにMySQL 8.0のワクワク要素について記述します。
はじめに
ツイート内容について少し補足します。
Auroraを使用したことのある方や、AWSを普段から使っている方、MySQL 8.0とMySQL5.6の違いがわかる方は、ワクワク要素について進んでいただいて問題ないと思います。
AuroraでMySQL8.0という点について軽く記述します。
Amazon Aurora
クラウド向けに構築された、MySQL および PostgreSQL と互換性のあるリレーショナルデータベースです。商用データベースと同等のパフォーマンスと可用性を、10 分の 1 のコストで実現します。
ここで、大切なのはAuroraではMySQLと互換性があることです。
AmazonAuroraメジャーバージョン
Auroraバージョンはこの スキームを使用し ます。オーロラメジャーバージョンは、オーロラはと互換性があることをMySQLやPostgreSQLのコミュニティメジャーバージョンを指します。次の例は、コミュニティのMySQLバージョンとPostgreSQLバージョン、および対応するAuroraバージョン間のマッピングを示しています。
major.minor.patch
コミュニティメジャーバージョン | オーロラメジャーバージョン |
---|---|
MySQL 5.6 | Aurora MySQL 1 |
MySQL 5.7 | Aurora MySQL 2 |
現在Aurora
では、MySQLと互換性がありますが対応しているバージョンがMySQL 5系に限定されます。
ですので、Aurora
ではMySQL8.0相当の機能は使えないこととなります。
MySQL 8系とMySQL 5系
重要なことなので少しだけ触れておきます。
大まかにまず、8系と5系で分かれます。
その5系でも、5.6と5.7で分かれます。
※筆者がMySQLを使い始めたのが5.6からなのでそれより前には詳しくないので割愛します。
www.slideshare.net
要するにこういうこと
Amazon Auroraだと、MySQL5.6互換の環境しか起動できないためMySQL8.0を触ることができないという話になります。
それを踏まえて、なぜMySQL8.0がわくわくするのかについては下記の本題で述べようと思います。
AWSでMySQL8.0だと困ること
ただの寄り道です。
Auroraで、MySQL 8.0互換性のあるバージョンが使用できない以外にも弊害が存在します。
Amazon RDS Proxy による接続の管理
RDS for MySQL 8.0 では RDS Proxy を使用できません。
Lambdaで開発していたときに、RDSとの接続を考えていたときに見つけた機能です。
でも、使うのに制限があって結局使えなかったです。
ワクワク要素
自分が考えたワクワク要素を大きく2つに絞りました。
その中でもいくつか詳細に分けようと思います。
アップデート
言わずもがな一番ワクワクする瞬間ではないでしょか。
最近では、MySQL 8.0.26
が来ました。
MySQL :: MySQL 8.0 Release Notes :: Changes in MySQL 8.0.26 (2021-07-20, General Availability)
そこまで、目立った変化は見てないですが、下記のMySQL8.0.26の記事は面白かったです。
久々に書いた
— tkyk04 (@taka_yuki_04) 2021年8月5日
はてなブログに投稿しました #はてなブログ
innodb_strict_mode のセッション値を変更するのに必要な権限(from 8.0.26) - 41から始めました https://t.co/9MjQh11I3p
更新内容比較
リリースノートの更新項目の比較です。
5系だと、バグ修正がメインな気がします。
8系だと、様々な変更点があります。
8.0.26だと、用語の変更についての記述が多かったなと思いました。
互換性のない変更: MySQL 8.0.26から、「マスター」という用語を含む残りのほとんどの識別子に新しいエイリアスまたは置換名が提供 され、「ソース」に変更され ます。「スレーブ」、これは「レプリカ」に変更され ます。および「mts」( 「マルチスレッドスレーブ」の場合)は、「mta」(「マルチスレッドアプライヤー」の場合)に変更されます 。)。該当する場合は、新しい名前を使用するためにヘルプテキストも変更されます。
MySQL 8.0.26での変更(2021-07-20、一般提供)
- 監査ログノート
- 認証に関する注意事項
- コンパイルノート
- コンポーネントノート
- 非推奨と削除に関する注意事項
- エラー処理
- イベントスケジューラに関する注意事項
- ファイアウォールに関する注意事項
- 包装上の注意
- プラグ可能な認証
- サーバー管理
- 空間データのサポート
- Xプラグインノート
- 追加または変更された機能
- 修正されたバグ
MySQL 5.7.35での変更(2021-07-20、一般提供)
MySQL :: MySQL 5.7 Release Notes :: Changes in MySQL 5.7.35 (2021-07-20, General Availability)
アップデートが起きると、リリースノートを見て検証環境をアップデートして色々と触ってみてます。
他にも、アップデート関連でイベントなどあったりするので興味のある方は、過去の記録などご覧ください。
MyNA(日本MySQLユーザ会)
MySQL リリースノートでわいわい言う勉強会 8.0.24
リリースノートは最新情報の宝庫
ソフトウェアのリリースノート(またはチェンジログ)は、公開された最新バージョンにどんな機能が追加されたのか、どのような不具合が修正されたのか、どのように動作が変更されたのか、などなど、最新情報の宝庫です。 MySQLでは、1回の最新バージョンにて、非常に幅広い変更が加えられることがあります。
新機能追加
毎回ではないですが、機能追加が多数ある場合があります。
最近でいうと8.0.24のアップデートについて記述した記事もあります。
新機能
CTE
13.2.15 WITH(一般的なテーブル式)
共通テーブル式(CTE)は、単一のステートメントのスコープ内に存在し、後でそのステートメント内で、場合によっては複数回参照できる、名前付きの一時的な結果セットです。以下の説明では、CTEを使用するステートメントの記述方法について説明します。
WITH cte1 AS (SELECT a, b FROM table1), cte2 AS (SELECT c, d FROM table2) SELECT b, d FROM cte1 JOIN cte2 WHERE cte1.a = cte2.c;
一元的にテーブルを定義できるので便利ですね。
可読性の観点で利点がある機能ですね。
WITH句を使わないで書くなら下記の用になると思います。
SELECT b, d FROM (SELECT a,b FROM table1) AS cte1 JOIN (SELECT c,d FROM table2) AS cte2 WHERE cte1.a = cte2.c;
Window関数
12.21.1ウィンドウ関数の説明
このセクションでは、クエリの各行について、その行に関連する行を使用して計算を実行する非集計ウィンドウ関数について説明します。ほとんどの集計関数は、ウィンドウ関数としても使用できます。セクション12.20.1「集計関数の説明」を参照してください。
ウィンドウ関数の使用法の情報と例、および
OVER
句、ウィンドウ、パーティション、フレーム、ピアなどの用語の定義については、12.21.2項「ウィンドウ関数の概念と構文」を参照してください 。
集計とかするときによく使います。
ウィンドウ関数がなくても同様の出力結果はMySQL5.7でも取得可能ですが、SQLが複雑になります。
mysql> SELECT val, ROW_NUMBER() OVER w AS 'row_number', RANK() OVER w AS 'rank', DENSE_RANK() OVER w AS 'dense_rank' FROM numbers WINDOW w AS (ORDER BY val); +------+------------+------+------------+ | val | row_number | rank | dense_rank | +------+------------+------+------------+ | 1 | 1 | 1 | 1 | | 1 | 2 | 1 | 1 | | 2 | 3 | 3 | 2 | | 3 | 4 | 4 | 3 | | 3 | 5 | 4 | 3 | | 3 | 6 | 4 | 3 | | 4 | 7 | 7 | 4 | | 4 | 8 | 7 | 4 | | 5 | 9 | 9 | 5 | +------+------------+------+------------+
空間関数リファレンス(GIS)
12.17.1空間関数リファレンス
次の表に、各空間関数をリストし、それぞれの簡単な説明を示します。
GISについては、過去に一度だけ記事にしました。
GIS関数について色々知りたい方は、下記の方の記事を見てみてください。
自分もそろそろ追加や変更されたGIS関数についても触りたいと思っています。
わくわく注意書き
当たり前ですが、業務でAWSにMySQLを導入する場合、自分自身のわくわくだけでサービスを選択するのは気をつけてください。
ワクワクの気持ちを抑えて、必要な要件を満たすように適切なサービスを選択しましょう。
〆
参考記事
MySQL :: MySQL 8.0: MySQL 5.7よりも最大2倍高速
MySQL 8.0は何が優れていて、どこに注意すべきか。データベース専門家が新機能を徹底解説 - エンジニアHub|Webエンジニアのキャリアを考える!