最近、モッピーで使っているMySqlのバージョンが上がりました。
先輩方、ありがとうございました。
せっかくの機会なので、前に使っていた8.0.16から先、8.0.17以降のバージョンで変わったところを眺めて、クエリを書いたり、テーブル構成を考えたりする際に役立つ内容をまとめて記事に・・・
できませんでした。
ネタ元の英語版の膨大な更新履歴の量に圧倒され、8.0.21まで+8.1以降で力尽きました。
8.0.22から先の8.0系が読み込めてません。
せっかくなので、途中までの内容でも強引に記事にしておきます。
これを読んで、定期的に更新履歴を読もうと思っていただける方が増えれば幸いです。
最初は自分でまとめた内容とAIにまとめさせた内容で見比べようとか思ってたんですが、夢でした。
JSON_VALUE()関数が追加され、SELECT文やINDEX作成時の記述が簡略化できるように
今までCAST等を駆使して書かねばならなかったものが、関数1つで簡単に書けるようになりました。
影響バージョン:8.0.20(2020.4)
パーティショニングの要件の厳格化
文字列の先頭N文字に限ってはられたインデックスしかないカラムは指定できないなど、制限が強化された模様です。
これまではエラーにすることなく無視をしていたとのことで、教えてくれるようになってよかったです。
影響バージョン:8.0.20(2020.4)
EXPLAIN FORMAT=TREEでウィンドウ関数の情報を確認可能に
これはうれしい!
影響バージョン:8.0.20(2020.4)
ファイルや変数に結果を出力するためのSELECT INTO構文の変更
INTOの位置など変更になるようです。使ってる方はご確認を。
影響バージョン:8.0.20(2020.4)
インデックスを強制する場合の構文の変更、DELETE文でも利用可能に
これまでの「FORCE INDEX」等は非推奨となり、JOIN・ORDERなど各段階別の構文に移行せよとのことです。
合わせて、DELETE文でも指定が可能となりました。
影響バージョン:8.0.20(2020.4)
ハッシュ結合の利用によるパフォーマンスの向上
早くなるのはいいことですね。
影響バージョン:8.0.17から8.0.20まで、段階的に導入
JSON_TABLE()関数におけるON EMPTYとON ERRORの順序の強制予定
SQLの標準として決まっている「ON EMPTYが先」というルールを将来強制する予定とのことです。
影響バージョン:8.0.20(2020.4)
DATETIME値にタイムゾーンを指定可能に
リクエスト元でJSTに変換せずとも、そのままクエリを発行可能になりました。
「Z」「+00:00」などはOK、0の桁を省略した「+9:00」や負数の0で「-00:00」とするのはNGのようです。
あくまで標準のTZに変換するために利用するのみで、TZ情報は保存されないとのこと。
そもそもどこを標準にしているのか、事前に設定の確認をお忘れなく!
弊社はちゃんとJSTになっていました。
影響バージョン:8.0.19(2020.1)
INSERT ... ON DUPLICATE KEY UPDATE文で行や列にエイリアスを設定可能に
INSERT文の中で書いた行や列にエイリアスを設定しておくことで、UPDATE文の中から参照できます。
これに伴い、これまであったVALUES()による参照は非推奨となり、将来エラーとなるとのことです。
影響バージョン:8.0.19(2020.1)、8.0.20(2020.4)
「RECURSIVE CTE」の文でもLIMIT・OFFSETが利用可能に
CTE????
なんのことやら・・・
今度勉強しときます。
影響バージョン:8.0.19(2020.1)
WHEREなどのない「SELECT * FROM テーブル名」を、省略して「TABLE テーブル名」と書けるように
SQL標準の表記にMySQLが対応したとのこと。
この書き方は初めて知りました。
影響バージョン:8.0.19(2020.1)
YEAR型が4桁に統一、表示幅付きの書き方とUNSIGNEDが削除予定と発表
今時使ってる人もほぼいないと思いますが、YEAR(2)は廃止されます。
その結果YEARは4桁統一となるため、YEAR(4)という書き方も非推奨になるとのこと。
また、YEARにUNSIGNEDをつけることも非推奨と明記されました。将来エラーになるっぽいです。
影響バージョン:8.0.19(2020.1)
EXPLAIN ANALYZEの導入
実際にクエリを実行し、EXPLAINで出てくる情報に加えて、実所要時間やループ回数などを詳細に確認できる。
実行計画上は遅くないはずのクエリが遅い!といった場合の調査に活用できるはず。
影響バージョン:8.0.18(2019.10)
外部キーを作るなら、参照先にユニークキーが必要
今までこの辺適当だったものが、通常のKEYやPARTIAL KEYではエラーが出るようになるようです。
現状では一時的にこのチェックをすり抜ける方法が用意されていますが、将来削除される予定です。
8.0系から8.4へのアップデートにおいても、ここはいったんスルーして警告にとどめてくれます。
将来の削除に備えて、今のうちにテーブル構成の見直しを!
影響バージョン:8.4.0以降
STR_TO_DATE()関数の挙動変更
本来存在しない11/31のような日付を変換したとき、これまではそのまま出力していましたが、適切な日付に直して出力するようになりました。
挙動変更にご注意ください。
影響バージョン:8.2.0以降