オープンソースソフトウエア(OSS)のRDBMSの機能強化が進んでいる。2013年2月にリリースされたばかりの「MySQL 5.6」や2012年9月公開の「PostgreSQL 9.2」は、従来版で指摘された性能課題を一部解消した。さらにMySQLはmemcached APIを実装し、分散メモリーキャッシュの機能を取り込んだ。
2013年2月5日に、オープンソースソフトウエア(OSS)RDBMS「MySQL」の最新版(5.6)が公開された。MySQLの導入支援を手掛けるスマートスタイルの野津和也氏(代表取締役社長)は「MySQLは商用RDBMSとの性能差を埋める方向で開発が進んでいる」と話す。これは2012年9月に公開された「PostgreSQL 9.2」も同じ。どちらも最新版において、性能課題の一部を解消した(図1)。
性能向上をもたらす四つの機能強化
解消した一つ目の性能課題は、従来版のMySQLでサブクエリーを含むSQL文の実行処理が重かったことである。具体的には、1回のSQL文の実行で繰り返しサブクエリーが実行されるようなケースだ(相関クエリーと呼ぶ)。そうしたSQL文が性能面で問題になると、これまでは開発者がSQL文を書き直し、サブクエリーではなくジョインで処理するようにしていた。MySQL 5.6はそうしたサブクエリーをオプティマイザーが判断し、サブクエリーの繰り返し実行をしなくなる。「MySQLのサブクエリーは遅い」と思っていた現場では、その印象は変わるかもしれない。
インデックス上にデータがあっても、必ずテーブルにアクセスするというムダがある。これが二つ目の性能課題であり、従来版のPostgreSQLが抱えていた。一般にRDBMSではDBアクセスを高速化するため、アクセス頻度の高いカラムでインデックスを作成しておく。例えば社員名簿テーブルのインデックスを社員名カラム「name」で作成したとする。このインデックスによって本来は、同じ名前の社員数をカウントするときインデックスを参照するだけで済むのだが、従来版のPostgreSQLではテーブルにアクセスする必要があった(図2上)。