この記事は関係データベースの機能比較によって目的にあったデータベースを選択するための資料です。すべてのデータベースを網羅する内容ではなく主要な商用データベースとオープンソースのデータベースに限定した比較を行っています。
ライセンスの比較
データベース | 開発 | ライセンス |
---|---|---|
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なので 通信機能自体がないので、通信の暗号化機能は不要です。