MySQL
PostgreSQL
mariadb

MariaDB(MySQL) PostgreSQL どちらを選ぶか?

私がフリーのSQLデータベースを選択する場合、MariaDB/PostgreSQLを採用することが多い。 この記事では改めて両者を比較してみる。

正規表現(regexp_replace)

大きな差はない。PostgreSQLの正規表現がフラグなどがPerl等のプログラミング言語に採用されている正規表現に近く馴染みやすい。MariaDBのそれは少し異なる。

メモリストレージエンジン と UNLOGGEDテーブル

MariaDBはデータベースエンジンを選択できる。これにはPostgreSQLにはないメモリだけのデータベースであるメモリストレージエンジンを選択することが出来る。もちろん物理メモリを消費するので大きなテーブルはできないが、速度は圧倒的である。一方PostgreSQLには、UNLOGGED TABLEと呼ばれるジャーナルを作らないテーブルを作ることが出来る。信用性は落ちるがこれも高速動作する。使い勝手はUNLOGGED TABLEの方が良いが、ストアド・プロシージャ内の一時テーブルにはメモリストレージエンジンが便利である。メモリストレージエンジンの場合、BLOBとTEXT型は使えない点には注意が必要だ。

  • MariaDB
CREATE TABLE test (id int, v varchar(10) ) ENGINE = MEMORY;
  • PostgreSQL
CREATE UNLOGGED TABLE test (id int, v text);

ストアード・プロシージャ

ストアード・プロシージャの自由度はPostgreSQLの方が高い。例えば、MariaDBではストアド・プロシージャの入力にテーブルを扱うことができない。結局、一時テーブル(TEMPORARY TABLE)を経由することになるので、PostgreSQLと比べると使いにくい。一時ビュー(TEMPORARY VIEW)があれば、まだマシだったかもしれないがそれもない。その他PostgreSQLのストアード・プロシージャにはPerlやPythonを用いることが出来る。

パラレルクエリー

PostgreSQLにはパラレルクエリーと呼ばれる一つのクエリーを複数のCPUスレッドで処理する機能が実装されている。使いこなすのは難しいが、クエリーを高速にすることができる。MariaDBで同様のことをする場合、呼び出し側で処理を分割し複数プロセスから複数のクエリーを実行する必要がある。

MySQL

MySQLにも少し触れる。商用SQLデータベースの大手のORACLEが著作権・商標権をもっていることやライセンスやの問題から、昨今のLinuxの各ディストリビューションではMySQLから派生したMariaDBが採用されていることが多い。私もMySQLはあまり使用していない。また、正規表現関連の実装も遅れておりregexp_replaceは、MySQL8からの実装になる。

まとめと考察

性能的な評価はしていないが、使いやすいのはPostgreSQLだと考える。もしカリカリに調整が必要なくらいパフォーマンスが要求される場合は、OracleやMS-SQLServerも選択肢に入れてもいいのではないだろうか。