関係データベースの比較

この記事は関係データベースの機能比較によって目的にあったデータベースを選択するための資料です。すべてのデータベースを網羅する内容ではなく主要な商用データベースとオープンソースのデータベースに限定した比較を行っています。

ライセンスの比較

ライセンス
データベース 開発 ライセンス
DB2 IBM プロプラエタリ
ORACLE database ORACLE プロプラエタリ
Microsoft SQL Server Microsoft プロプラエタリ
MySQL ORACLE GPL v2 or プロプラエタリ
PostgreSQL PostgreSQL Global Development Group PostgreSQL Licence (a liberal Open Source license)
SQLite D. Richard Hipp Public Domain
H2 H2 software EPL or Modified MPL

同時実行の比較

同時実行
データベース ACID READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE
DB2 Yes Yes Yes
(MVCC)
Yes Yes
ORACLE database Yes No Yes
(MVCC)
No Yes
Microsoft SQL Server Yes Yes Yes
(MVCC)
Yes Yes
MySQL Yes Yes Yes
(MVCC)
Yes Yes
PostgreSQL Yes No Yes
(MVCC)
No Yes
SQLite Yes No No Yes Yes
H2 Yes Yes Yes
(MVCC)
No Yes

インデックスの比較

インデックス
データベース リバース ハッシュ ビットマップ Spatial
DB2 Yes Yes Yes No
ORACLE database Yes Yes Yes Yes
Microsoft SQL Server No Yes Yes Yes
MySQL No Yes
(MEMORY,
Cluster (NDB),
InnoDB)
No Yes
(MyISAM)
PostgreSQL Yes Yes Yes Yes
(need PostGIS)
SQLite Yes No No Yes*1
H2 No Yes No Yes
  • ビットマップインデックスはデータウェハウス向けには有効ですが、insertやupdate、deleteのスケーラビリティが悪くオンラインアプリケーションには有効な場合は少ない。
  • SQLiteにはR木のインデックスやジオメトリ型において独自の実装があり、空間データの管理が行えます。ただし、高度な空間クエリの実行や複数の投影法 (地図)を利用する際にはSpatiaLite拡張機能が必要になります。

結合方法の比較

ジョイン
データベース ハッシュジョイン ソート/マージジョイン ビットマップジョイン マテリアライズドビュー
DB2 Yes Yes Yes Yes
ORACLE database Yes Yes Yes Yes
Microsoft SQL Server Yes Yes No Yes
MySQL Yes
(MEMORY,
Cluster (NDB),
InnoDB)
No No No
PostgreSQL Yes Yes No No
SQLite No No No No
H2 Yes No No No
  • ソート/マージジョインは表同士をソートして結合する方法ですが、ハッシュジョインと比較した場合はソート済みの状態でデータを取得できる索引アクセスではソート/マージ結合に優位性があります。事前ソート済みでなければハッシュジョインと比較するとパフォーマンスが悪い場合が多くなります。

パーティショニングの比較

パーティショニングはデータベースを複数の部分に分割することで、分割された各部分をパーティションと呼びます。データベースの分割はスケールアウトを理由に行われます。

分割には分割キー (partitioning key)を使う。分割基準としては以下のものがあります。

範囲分割 (range partitioning)
分割キーの値がある範囲内にあるかどうかで分割する。
ハッシュ分割 (hash partitioning)
ハッシュ関数の値によってパーティションに含めるかどうかを決定する。
リスト分割 (list partitioning)
値の一覧にパーティションを割り当て、分割キーの値をその一覧に照らしてパーティションを選択する。
パーティショニング
データベース レンジ ハッシュ リスト
DB2 Yes Yes Yes
ORACLE database Yes Yes Yes
MySQL Yes Yes Yes
PostgreSQL Yes Yes Yes
SQLite No No No
H2 No No No

セキュリティの比較

セキュリティ
データベース 通信の暗号化 権限分離 リソース制限 ディレクトリサービス連携 監査
DB2 Yes Yes Yes Yes Yes
ORACLE database Yes Yes Yes Yes Yes
Microsoft SQL Server Yes Yes Yes Yes Yes
MySQL Yes Yes Yes Yes
(MySQL commercial edition or
MariaDB)
Yes
(MySQL commercial edition or
MariaDB)
PostgreSQL Yes Yes Yes Yes Yes
SQLite No No No No No
H2 Yes
(Server mode)
Yes Yes No No
  • SQLite は組み込みDBなので 通信機能自体がないので、通信の暗号化機能は不要です。