MySQLのGIS機能2024

 このエントリは、RDBMS-GIS(地理情報・位置情報) Advent Calendar 2024 の1日目です。「RDBMS-GIS Advent Calendar」では今年も参加者を熱烈募集中です。「はじめて触ってみた」という内容も熱烈歓迎ですので、この機会にお使いのRDBMSでぜひ地理情報の操作に挑戦してみませんか。


 さて。このエントリはMySQL の Spatial機能(GIS機能)、2024年の進化のまとめです。MySQLは臨時のリリースがない限りは通常、3ヶ月に一度、年4回のアップデート・バージョンが公開されるので、年4回のMySQL 8.0シリーズのリリースについて書けば良さそうなものですが、今年は LTSと Innovation Releaseに分かれたほか、8.0系と8.4系もあるので、盛りだくさんになりました。 バージョン番号は盛りだくさんですが、GIS機能の進化はどうでしょうか。

リリースノートから、この1年の進化を見てみましょう。

MySQL 8.0シリーズ

MySQL 8.0.36 (1月)

 "spatial"関連の修正事項なし

MySQL 8.0.37 (4月)

 "spatial"関連の修正事項なし 

MySQL 8.0.38 (7月)

 SRIDを持つ列を含む空間インデックス関連の不具合が修正されました。空間インデックスが空でありインデックスが有効に使われない事象と、FORCE INDEXで強制的に使おうとすると "unplanned exit" が発生する事象でした。

MySQL 8.0.39 (7月)

 (8001個以上のテーブルがある時にMySQLが立ち上がらなくなるという不具合に対する緊急リリースであるため、その他の機能についてはほとんど修正なし)

MySQL 8.0.40 (10月)

 "spatial"関連の修正事項なし 

MySQL 8.4 LTSシリーズ

LTSシリーズは基本的に追加機能とかは行われないことになっているので、Spatial関連の新機能についてもそもそも期待薄。

MySQL 8.4.0 LTS(4月)

 "spatial"関連の修正事項なし 

MySQL 8.4.1 LTS (7月)

 MySQL 8.0.38 と同様の空間インデックス関連の不具合修正。

MySQL 8.4.2 LTS (7月)

 (MySQL 8.0.39と同様、緊急リリースのため、他の機能については修正なし)

MySQL 8.4.3 LTS (10月)

 "spatial"関連の修正事項なし 

MySQL Innovation Releases

MySQL 8.3.0 Innovation (1月)

 グループレプリケーションの group_replication_set_as_primary() が、新しいプライマリが選出される前に DDLとDCLの完了を待つようになった。このDDLの中にはCREATE SPATIAL REFERENCE SYSTEM文と DROP SPATIAL REFERENCE SYSTEMが含まれているので、一応GIS機能に影響のある修正ということで。

MySQL 9.0.0 Innovation (7月)

 MySQL 8.0.38と同様の空間インデックス関連不具合修正。

MySQL 9.0.1 Innovation (7月)

 (MySQL 8.0.39と同様、緊急リリースのため、他の機能については修正なし)

MySQL 9.1.0 Innovation (10月)

 "spatial"関連の修正事項なし 


まとめ

 全体を通してみると MySQL 2024年の進化は、空間インデックス関連の不具合が修正された、の1点だけと言えそうです。ちょっと遅々としている感じがありますね。関数の数が多ければ良いというものでもありませんがひとつの指標としてST_*関数を見てみると、PostGISは300個近く、対するMySQLは100個弱ということで大きく差が開いています。
 ひとにMySQLGIS機能を勧めたときに「PostGISでできるアレ、MySQLでできないんですね」として採用を見送られるのは(せっかく一瞬こっちを向いてくれたのに)非常に勿体なく寂しいので、少しずつでも対応関数を増やしていってもらいたいものです。Boost::Geometryへの呼び出し口を作るだけじゃないの?と思っているのですが、そんなに簡単な話でもないのかな?
 2025年のMySQL GIS機能に期待したいと思います。