Comparison of relational database management systems
The following tables compare general and technical information for a number of SQL database management systems. Please see the individual products' articles for further information. This article is not all-inclusive or necessarily up-to-date. Unless otherwise specified in footnotes, comparisons are based on the stable versions without any add-ons, extensions or external programs.
General information
Basic general information about the SQL DBMSes: creator, company, license, etc.
Maintainer | First public release date | Latest stable version | Software license | |
---|---|---|---|---|
Adaptive Server Enterprise | Sybase | 1987 | 12.5.3 | Proprietary |
Adaptive Server Anywhere | Sybase/iAnywhere | 1992 | 9.0.2 | Proprietary |
DB2 | IBM | 1982 | 8.2 | Proprietary |
Firebird | Firebird Foundation | July 25, 2000 | 1.5.2 | InterBase Public License |
Informix | Informix Software | 1985 | 10.0 | Proprietary |
HSQLDB | Hsqldb.Org | 2001 | 1.8.0 | BSD-based |
Ingres | Berkeley University, Computer Associates | 1980 | r3 3.0.1 | CA-TOSL |
InterBase | Borland | 1985 | 7.5.1 | Proprietary |
SapDB | SAP | ? | 7.4 | GPL with LGPL drivers |
MaxDB | MySQL AB, SAP | ? | 7.6 | GPL or proprietary |
Microsoft SQL Server | Microsoft | 1989 | 8.00.2039 (2000 SP4) | Proprietary |
MySQL | MySQL AB | November 1996 | 4.1 | GPL or proprietary |
Oracle | Oracle Corporation | 1977 | 10g Release 2 | Proprietary |
PostgreSQL | PostgreSQL Global Development Group | June, 1989 | 8.0.4 | BSD |
SQLite | D. Richard Hipp | August 17 2000 | 3.2.7 | Public domain |
Maintainer | First public release date | Latest stable version | Software license |
Operating system support
The operating systems the SQL DBMSes can run on.
Windows | Mac OS X | Linux | BSD | Unix | |
---|---|---|---|---|---|
Adaptive Server Enterprise | Yes | Yes | Yes | Yes | Yes |
DB2 | Yes | No | Yes | No | Yes |
Firebird | Yes | Yes | Yes | Yes | Yes |
HSQLDB | Yes | Yes | Yes | Yes | Yes |
Informix | Yes | Yes | Yes | Yes | Yes |
Ingres | Yes | ? | Yes | ? | Yes |
InterBase | Yes | No | Yes | No | Yes (Solaris) |
Adabas | ? | ? | ? | ? | ? |
SapDB | Yes | No | Yes | No | Yes |
MaxDB | Yes | No | Yes | No | Yes |
Microsoft SQL Server | Yes | No | No | No | No |
MySQL | Yes | Yes | Yes | Yes | Yes |
Oracle | Yes | Yes | Yes | No | Yes |
PostgreSQL | Yes | Yes | Yes | Yes | Yes |
SQLite | Yes | Yes | Yes | Yes | Yes |
Windows | Mac OS X | Linux | BSD | Unix |
Fundamental features
Information about what fundamental SQL DBMS features are implemented natively.
ACID | Referential integrity | Transactions | Unicode | |
---|---|---|---|---|
Adaptive Server Enterprise | Yes | Yes | Yes | Yes |
DB2 | Yes | Yes | Yes | Yes |
Firebird | Yes | Yes | Yes | Yes |
HSQLDB | Yes | Yes | Yes | ? |
Informix | Yes | Yes | Yes | Yes |
Ingres | Yes | Yes | Yes | Yes |
InterBase | Yes | Yes | Yes | Yes |
SapDB | Yes | Yes | Yes | Yes |
MaxDB | Yes | Yes | Yes | Yes |
Microsoft SQL Server | Yes | Yes | Yes | Yes |
MySQL | Depends 1 | Depends 1 | Depends 1 | Yes |
Oracle | Yes | Yes | Yes | Yes |
PostgreSQL | Yes | Yes | Yes | Yes |
SQLite | Yes | No 2 | Basic 2 | Yes |
ACID | Referential integrity | Transactions | Unicode |
Note (1): For transactions and referential integrity, the InnoDB table type must be used; the default table type, MyISAM, does not support these features. However, even the InnoDB table type permits storage of values that exceed the data range; some view this as violating the Integrity constraint of ACID.
Note (2): CHECK and FOREIGN KEY constraints are parsed but are not enforced. Triggers can be used instead. Nested transactions are not supported. [1]
Tables and views
Information about what tables and views 3 (other than basic ones) are supported natively.
Temporary table | Materialized view | |
---|---|---|
Adaptive Server Enterprise | Yes 5 | No |
DB2 | Yes | Yes |
Firebird | No | No |
HSQLDB | Yes | No |
Informix | Yes | Yes |
Ingres | Yes | No |
InterBase | Yes | No |
SapDB | Yes | No |
MaxDB | Yes | No |
Microsoft SQL Server | Yes | Similar 6 |
MySQL | Yes | No |
Oracle | Yes | Yes |
PostgreSQL | Yes | Similar 4 |
SQLite | Yes | No |
Temporary table | Materialized view |
Note (4): Materialized view can be emulated with PL/pgSQL, PL/Perl, PL/Python or other procedural languages. One example is here: [2].
Note (5): Server provides tempdb, which can be used for public and private (for the session) temp tables. [3]
Note (6): MS SQL server provides indexed views. [4]
Indexes
Information about what indexes (other than basic B-/B+ tree indexes) are supported natively.
R-/R+ tree | Hash | Expression | Partial | Reverse | Bitmap | |
---|---|---|---|---|---|---|
Adaptive Server Enterprise | No | No | No | No | Yes | No |
DB2 | No | ? | No | No | Yes | Yes |
Firebird | No | No | No | No | No | No |
HSQLDB | No | No | No | No | No | No |
Informix | Yes | Yes | Yes | No | No | No |
Ingres | Yes | Yes | No | No | No | No |
InterBase | ? | ? | No | No | No | No |
SapDB | ? | ? | No | No | No | No |
MaxDB | ? | ? | No | No | No | No |
Microsoft SQL Server | ? | ? | No | No | No | No |
MySQL | MyISAM tables only | HEAP tables only | No | No | No | No |
Oracle | EE edition only | Cluster Tables | Yes | No | Yes | Yes |
PostgreSQL | Yes | Yes | Yes | Yes | Yes 7 | Yes 8 |
SQLite | No | No | No | No | No | No |
R-/R+ tree | Hash | Expression | Partial | Reverse | Bitmap |
Note (7): A PostgreSQL functional index can be used to reverse the order of a field.
Note (8): PostgreSQL 8.1, presently in beta, can construct an in-memory bitmap of indexes for the duration of a query. On-disk bitmap indexing is planned for 8.2.
Other objects
Information about what other objects are supported natively.
Domain | Cursor | Trigger | Function 5 | Procedure 5 | External routine 5 | |
---|---|---|---|---|---|---|
Adaptive Server Enterprise | Yes | Yes | Yes | Yes | Yes | Yes |
DB2 | No | Yes | Yes | Yes | Yes | Yes |
Firebird | Yes | Yes | Yes | Yes | Yes | Yes |
HSQLDB | ? | No | Yes | Yes | Yes | Yes |
Informix | ? | Yes | Yes | Yes | Yes | Yes |
Ingres | Yes | Yes | Yes | Yes | Yes | ? |
InterBase | Yes | Yes | Yes | Yes | Yes | Yes |
SapDB | Yes | Yes | Yes | Yes | Yes | ? |
MaxDB | Yes | Yes | Yes | Yes | Yes | ? |
Microsoft SQL Server | No | Yes | Yes | Yes | Yes | Yes |
MySQL | No | No 3 | No 3 | No 3 | No 3 | Yes |
Oracle | Yes | Yes | Yes | Yes | Yes | Yes |
PostgreSQL | Yes | Yes | Yes | Yes | Yes | Yes |
SQLite | No | No | Yes | No | No | Yes |
Domain | Cursor | Trigger | Function | Procedure | External routine |
Note (3): These database objects are available in MySQL 5.0 only, which is an experimental version.
Note (5): Both function and procedure refer to internal routines written in SQL and/or procedural language like PL/SQL. External routine refers to the one written in the host languages, such as C, Java, Cobol, etc. "Stored procedure" is a commonly used term for these routine types. However, its definition varies between different database vendors.
Partitioning
Information about what partitioning methods are supported natively.
Range | Hash | Composite (Range+Hash) | List | |
---|---|---|---|---|
Adaptive Server Enterprise | No | Yes | No | No |
DB2 | Yes | Yes | Yes | Yes |
Firebird | No | No | No | No |
Informix | ? | ? | ? | ? |
Ingres | Yes | Yes | Yes | Yes |
InterBase | No | No | No | No |
SapDB | No | No | No | No |
MaxDB | No | No | No | No |
Microsoft SQL Server | Yes | No | No | No |
MySQL | No | No | No | No |
Oracle | Yes | Yes | Yes | Yes |
PostgreSQL | Yes 9 | Yes 9 | Yes 9 | No |
SQLite | No | No | No | No |
Range | Hash | Composite (Range+Hash) | List |
Note (9): PostgreSQL 8.1 (currently in beta) provides partitioning support through check constraints. Range, List and Hash methods can be emulated with PL/pgSQL or other procedural languages. [5]