对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析 (5)

支持临时表、常规表以及范围和列表类型的分区表。不支持哈希分区表。 由于PostgreSQL的表分区是通过表继承和规则系统完成了,所以可以实现更复杂的分区方式。

 

索引类型 

 

取决于存储引擎。MyISAM:BTREE,InnoDB:BTREE。 

 

支持 B-树、哈希、R-树和 Gist 索引。 

 

约束 

 

支持主键、外键、惟一和非空约束。对检查约束进行解析,但是不强制实施。 

 

支持主键、外键、惟一、非空和检查约束。 

 

存储过程和用户定义函数 

 

支持 CREATE PROCEDURE 和 CREATE FUNCTION 语句。存储过程可以用 SQL 和 C++ 编写。用户定义函数可以用 SQL、C 和 C++ 编写。 

 

没有单独的存储过程,都是通过函数实现的。用户定义函数可以用 PL/pgSQL(专用的过程语言)、PL/Tcl、PL/Perl、PL/Python 、SQL 和 C 编写。 

 

触发器 

 

支持行前触发器、行后触发器和语句触发器,触发器语句用过程语言复合语句编写。 

 

支持行前触发器、行后触发器和语句触发器,触发器过程用 C 编写。 

 

系统配置文件 

 

my.conf 

 

Postgresql.conf 

 

数据库配置 

 

my.conf 

 

Postgresql.conf 

 

客户机连接文件 

 

my.conf 

 

pg_hba.conf 

 

XML 支持 

 

有限的 XML 支持。 

 

有限的 XML 支持。 

 

数据访问和管理服务器 

 

OPTIMIZE TABLE —— 回收未使用的空间并消除数据文件的碎片
myisamchk -analyze —— 更新查询优化器所使用的统计数据(MyISAM 存储引擎)
mysql —— 命令行工具
MySQL Administrator —— 客户机 GUI 工具 

 

Vacuum —— 回收未使用的空间
Analyze —— 更新查询优化器所使用的统计数据
psql —— 命令行工具
pgAdmin —— 客户机 GUI 工具 

 

并发控制 

 

支 持表级和行级锁。InnoDB 存储引擎支持 READ_COMMITTED、READ_UNCOMMITTED、REPEATABLE_READ 和 SERIALIZABLE。使用 SET TRANSACTION ISOLATION LEVEL 语句在事务级设置隔离级别。 

 

支 持表级和行级锁。支持的 ANSI 隔离级别是 Read Committed(默认 —— 能看到查询启动时数据库的快照)和 Serialization(与 Repeatable Read 相似 —— 只能看到在事务启动之前提交的结果)。使用 SET TRANSACTION 语句在事务级设置隔离级别。使用 SET SESSION 在会话级进行设置。

 

MySQL相对于PostgreSQL的劣势:

MySQL

 

PostgreSQL

 

最重要的引擎InnoDB很早就由Oracle公司控制。目前整个MySQL数据库都由Oracle控制。

 

BSD协议,没有被大公司垄断。

 

对复杂查询的处理较弱,查询优化器不够成熟

 

很强大的查询优化器,支持很复杂的查询处理。

 

只有一种表连接类型:嵌套循环连接(nested-loop),不支持排序-合并连接(sort-merge join)与散列连接(hash join)。

 

都支持

 

性能优化工具与度量信息不足

 

提供了一些性能视图,可以方便的看到发生在一个表和索引上的select、delete、update、insert统计信息,也可以看到cache命中率。网上有一个开源的pgstatspack工具。

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzgspj.html