首先mysql和postgres在早期的时候完全是两个极端。mysql更像是个“基本上满足的是关系数据库的语法的大号KV”,对关系型数据库的高级功能支持的不是很友好。
在从技术而言,PG功能丰富,SQL支持得很完备,强大的数据类型,严谨的关系模型,很难从关系模型去找出PG
得
不合理之处,多年的积累,连全文索引词库都非常丰富,据说对于一些简单的搜索,都可以摆脱搜索引擎了,优化器做得很好,在代价选择上PG实现了基因算法,这一点连Oracle也没有做到。
也正因如此在早期mysql变成了事实上的互联网企业OLTP的事实标准。不管干啥业务,mysql都不可或缺。在行业里跳槽来跳槽去的程序员普遍对mysql也更熟悉。大量围绕mysql的商业服务都成为了行业主流。新一代分布式数据库,像TiDB为了吸引用户,首先要做的是“兼容mysql的语法”
数据库这种早期用了就基本不能换的东西是有滞后性的,你看到现在MySQL的现状,是5年前MySQL是国内几乎唯一选择的情况。5年前Postgres就已经在欧美初创项目里比较受欢迎了,PostgreSQL在全球也是二线,不独中国。PostgreSQL一直就功能比MySQL完备,唯独缺乏一个引爆点,导致生态长期不如MySQL。
两者之间区别:
Postgres是一个对象关系数据库(ORDBMS),具有表继承和函数重载等功能,可以处理复杂的查询和大型数据库。
而MySQL就是一个纯粹的关系数据库(RDBMS)相对易于建立和管理,快速,可靠且易于理解。
pg替代mysql,技术上没有任何问题。mysql能做到的,pg同样能做到,不说做得更好,至少是各有千秋。也是因为pgsql的确是好,这个查查就知道。当然现在pgsql集群方案也很多,所以我估计早期的时候,pgsql在集群方案上可能不如mysql。而且pgsql的地理信息支持是很好的……。
有一个优势是pg是BSD开源协议,允许在pg的基础上开发商业版和销售。对于商业化非常友好。而mysql是GPL协议,如果某软件使用了GPL协议,那该软件也必须开源。所以一定程度上mysql受到oracle的控制。
服务器优化的选项:MySQL提供了很多选项来调整和优化你的MySQL服务器,通过调整变量,如排序缓冲区大小,读缓冲区大小,最大允许包等。
易于使用和流行:MySQL的流行意味着很容易找到具有丰富MySQL经验的数据库管理员。企业在选择技术的时候,也并不会单从性能价格方面考虑,用户群体广阔也会是一个重要的参考。
虽然都是开源产品,有分商业性开源和非商业性开源,商业开源带有更强的意图性,更容易形成易用的产品,包括php其实也是有商业意图的开源,抱团出了个LAMP大红大紫,非商业性的开源产品的早期进化也许慢一些,偏学术一些。
还有一点就是,如此简单的MySQL,居然在很早的时候就提供了主从复制功能(比PG早好几年),这简直就是逆天了,能省下运维多少事啊。当你学会了mysql以后,postgre又不是压倒性的超过mysql,那么人家当然不会想学个新东西了