これは MySQL Casual Advent Calendar 2018 23 日目の記事です。
昨日(22 日目)は okumurakengo さんでした。
個人的に、MySQL 8.0 の頃に色々な機能を試してきたので、ここらで振り返りを。
AUTO_INCREMENT
記念すべき(?)MySQL 8.0 に関する「やってみた」の最初の投稿です。
MySQL(InnoDB)では、AUTO_INCREMENT の最後の発行値を保持していなかったので、再起動などをするとそれが失われて「保存されているレコードの最大値 +1」に戻ってしまっていたのですが、MySQL 8.0 ではそれが改善されたよ、という話です。
余談ですが、MySQL 5.6 ベースの Amazon Aurora では、Serverless でもこの問題は解消されていないようで…。
テーブルスペース・ログの暗号化
最初、8.0.1(DMR) の頃に記事を書き、8.0.2 → 8.0.3(RC) → 8.0.4 と内容を更新していきました。
なお、GA となった 8.0.13 では一般テーブルスペースの暗号化もサポートしました。
そろそろバイナリログの暗号化もサポートされそうですね。
ウィンドウ関数(Window Functions)・共通テーブル式(CTE : Common Table Expressions)
集計や分析に便利なウィンドウ関数の紹介記事です。最初にみんな大好き RANK 関数、次に少しだけ細かい使い方にチャレンジしました。
また、登場順とは逆になりましたが、共通テーブル式(CTE)についても書きました(再帰 CTE が便利)。
こういうときに例に使うデータは、その時代の話題・流行や、本人の趣味であることが多いので、後から見返すと「なにこのデータ?」となりがちですね(?)。
ロール
事故防止とユーザ毎のアクセス権設定の手間を(ある程度)省くのに便利なロール(Role)です。
全体像がよくわからない方、お馴染み yoku0825 さんのこちらの記事にまとめがあります。
- MySQLのロール周りのあれこれ(日々の覚書)
オプティマイザ関連
MySQL 8.0 の新機能に「ヒストグラム」が 2 つあって混乱しがちですが、こちらはオプティマイザが SQL を実行するときの判断に使うほうのオプティマイザ統計情報の話です。
結合(JOIN)でうまく使う方法が見出せなかったのが残念(できるらしいのですが)。
また、SQL の実行時間は「取ってくるデータがバッファプールに載っているかどうか」に大きく影響されるのでこちらの件はもうちょっと話題になるかな?と思ったのですが、なりませんね…。
もっとも、オプティマイザの判断の結果、特定のデータがいつまでもバッファプールに載らない、という「副作用」が生じる可能性もありますが。
降順 INDEX
これまで MySQL では無視され続けた INDEX 作成時の降順指定がようやく有効になりました。
といっても、単独の INDEX を降順にしても大して性能に影響はないので、複合 INDEX で使うことが前提になりそうですね。
なお、本題からは外れますが、降順 INDEX でのロック動作の変化についてこちらの記事の最後のほうで言及しています。
キーワードと予約語
MySQL 8.0 で埋め込まれた「地雷」の話です(バージョンアップあるある)。
なお、yoku0825 さんのこの話を発端に、公式リファレンスマニュアルにこのバージョン間比較が追加されたとか…?
- Chapter 2 Keywords and Reserved Words(MySQL Server Version Reference)
GIS
このへんは「よくわからないけどやってみた」話です。
その後、MySQL ユーザ会の sakaik さんが「平成の伊能忠敬」として全国行脚を…?
こちらの Advent Calendar にいろいろ取り上げられています。
ロック状態の確認
MySQL 8.0 で「過去バージョンでいつも使っていたテーブル」が変更になった話です。
これ、大した情報を書いていない割に、私の Qiita 記事の中では PV が多い記事です。
その後、これを使って実際に解析してみたのがこの記事です。
SQL 統計情報
「もう 1 つのヒストグラム」、SQL 実行時間の分布と、その元となる統計情報の収集についての記事です。
因みに、業務では MySQL 8.0 を使っていないので pt-query-digest には大変お世話になっております。
おまけ/GA 後に試した機能
1 つ↑関連のおまけ記事です。
イタズラはほどほどに…。
意外と使える…?
おまけ 2/これ書いてない!を思いつく範囲で
- 認証まわり(Caching SHA-2 Pluggable Authentication とか)
- JSON 関連(
JSON_TABLE()
とか) - レプリケーション/InnoDB Cluster 関連
- その他 SSL/TLS ライブラリ変更、
SET PERSIST
などなど
以上、MySQL 8.0 が DMR/RC だった頃に試した機能の振り返りでした。
MySQL 8.0 から「GA になってもどんどん機能追加していくぞ!」宣言が公式に出たので(以前のバージョンでそれがなかった、とは言わない)、おそらくこれからも機能追加が進んでいくのでしょう。
明日、24 日目はi_rethi さんです。
- Dimitriさんのブログを読んでみよう(hiroi10のブログ)