On Tue, Mar 19, 2013 at 12:07 AM, Philip Goh <philip.wj....@gmail.com>wrote:

> They're much of a muchness. I've favoured Postgres because it seems more
> straightforward as there aren't multiple distributions and crucially
> multiple storage engines to worry about. In MySQL's favour, Amazon RDS
> makes it incredibly simple to set up a scalable and reliable database so
> bear that in mind if you're targeting Amazon's EC2 infrastructure.
>
> In the end, if you're asking this question you can't go far wrong if you
> toss a coin and pick one.
>
>
Much of a muchness? They *really* aren't. One of them is an actual
database. One of them… isn't.

I've used both MySQL and PostgreSQL in production sites, and I've been a
developer on Django's ORM for over 7 years. In all that time, my experience
of MySQL has been a constant stream of "What the hell were they smoking".
In all that time, I can't think of a single thing PostgreSQL has done which
was equally surprising. PostgreSQL just does what a database should do.

PostgreSQL is a fast, well engineered database that follows the SQL
specification well. It has a rich indexing structure, and a query planner
that makes generally smart decisions.

MySQL doesn't implement transactions at all under MyISAM, and gets them
*wrong* under InnoDB (constraint deferral anyone?). It has an incredibly
naive indexing structure, and a query planner that is dumb as a bag of
hammers. If it's even *possible* for the MySQL query planner to use an
index, it will almost universally select the *wrong* index. And I hope you
weren't planning to do anything exotic like a subquery.

And then, just for giggles, MySQL does stuff like this:

https://code.djangoproject.com/ticket/16809

Summary - if you issue a SELECT query that contains an "WHERE X IS NONE"
clause, and nothing matches the SELECT, and an object was inserted by the
last statement, the SELECT query returns *the primary key of the object
that was recently inserted*, not an empty result set. Anyone who can
rationalize this behavior without resorting to medicinal grade
hallucinogens wins a shiny new penny.

Once upon a time, you *might* have been able to argue that MySQL was easier
to install, was faster for certain usage profiles, and had better support
for master/slave setups. But that was 5-10 years ago.

At this point in time, the *only* advantage that MySQL has is it's
ubiquity, especially when it comes to deployment platforms -- MySQL's
historical popularity means that some cloud hosting providers (like Amazon)
provide MySQL support before they provide PostgreSQL support. However, you
can get cloud hosted PostgreSQL (e.g., Heroku), and it's not *that* hard to
set up yourself if that's compatible with your needs.

tl;dr - Friends don't let friends use MySQL.

Yours,
Russ Magee %-)

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to