Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
612 views
in Technique[技术] by (71.8m points)

postgresql - Postgres 9.1 vs Mysql 5.6 InnoDB?

Simple question - what would better for a medium/big size database with requirement for compatibility with ACID in 2012.

I have read it all (well most) about mySQL vs pgSQL but most of those posts relate to version 4,5.1 and 7,8 respectively and are quite dated (2008,2009). Its almost 2012 now so I guess we could try and take a fresh look at the issue.

Basically I would like to know if there is anything in PostgreSQL that out-weights ease of use, availability and larger developer/knowledge base of MySQL.

Is MySQL's query optimizer still stupid? Is it still super slow on very complicated queries?

Hit me! :)

PS. And don't send me to goggle or wiki. I am looking for few specific points not an overview + I trust StackOverflow more than some random page with 'smart guy' shining his light.

Addendum

Size of the project: Say an ordering system with roughly 10-100 orders/day per account, couple of thousand accounts, eventually, each can have several hundred to several thousand users.

Better at: being future proof and flexible when it comes to growing and changing requirements. Performance is also important as to keep costs low in hardware department. Also availability of skilled workforce would be a factor.

OLTP or OLAP: OLTP

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

PostgreSQL is a lot more advanced when it comes to SQL features.

Things that MySQL still doesn't have (and PostgreSQL has):

  • deferrable constraints

  • check constraints (MySQL 8.0.16 added them, MariaDB 10.2 has them)

  • full outer join
    MySQL silently uses an inner join with some syntax variations:
    https://rextester.com/ADME43793

  • lateral joins

  • regular expressions don't work with UTF-8 (Fixed with MySQL 8.0)

  • regular expressions don't support replace or substring (Introduced with MySQL 8.0)

  • table functions ( select * from my_function() )

  • common table expressions (Introduced with MySQL 8.0)

  • recursive queries (Introduced with MySQL 8.0)

  • writeable CTEs

  • window functions (Introduced with MySQL 8.0)

  • function based index

  • partial index

  • INCLUDE additional column in an indexes (e.g. for unique indexes)

  • multi column statistics

  • full text search on transactional tables (MySQL 5.6 supports this)

  • GIS features on transactional tables

  • EXCEPT or INTERSECT operator (MariaDB has them)

  • you cannot use a temporary table twice in the same select statement

  • you cannot use the table being changed (update/delete/insert) in a sub-select

  • you cannot create a view that uses a derived table(Possible since MySQL 8.0)

      create view x as select * from (select * from y);
    
  • statement level read consistency. Needed for e.g.:
    update foo set x = y, y = x or
    update foo set a = b, a = a + 100

  • transactional DDL

  • DDL triggers

  • exclusion constraints

  • key/value store

  • Indexing complete JSON documents

  • SQL/JSON Path expressions (since Postgres 12)

  • range types

  • domains

  • arrays (including indexes on arrays)

  • roles (groups) to manage user privileges (MariaDB has them, Introduced with MySQL 8.0)

  • parallel queries (since Postgres 9.6)

  • parallel index creation (since Postgres 11)

  • user defined data types (including check constraints)

  • materialized views

  • custom aggregates

  • custom window functions

  • proper boolean data type
    (treating any expression that can be converted to a non-zero number as "true" is not a proper boolean type)

When it comes to Spatial/GIS features Postgres with PostGIS is also much more capable. Here is a nice comparison.

Not sure what you call "ease of use" but there are several modern SQL features that I would not want to miss (CTEs, windowing functions) that would define "ease of use" for me.

Now, PostgreSQL is not perfect and probably the most obnoxious thing can be, to tune the dreaded VACUUM process for a heavy write database.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...