Terrible choices: MySQL (2014)
blog.ionelmc.ro
blog.ionelmc.ro
If you still really want or need mysql please do check out mariadb, even old versions like mariadb 5.3 onwards added a lot of features and fixes for old problems from before the Sun acquisition (Remember, MariaDB was forked with the Sun buyout or MySQL AB, not Oracle). It's not entirely a drop in replacement though, read the manual and test your configs!
What MariaDB/MySQL is still really good at, is scaling horizontally pretty quickly, just be sure to separate out different schema workloads into different server instances, and don't make your schema overly complex. Not that it can get too complex anyway with SQL/PSM heh-snort snort.
Want to scale bigger and faster, and maybe with an even more highly tuned dataset per-cluster? Cassandra. Lots of Oracle and IBM business is being slurped up by Cassandra and Datastax.
Want mixed database workloads and all the RDBMS management, SQL and PL goodies? PostgreSQL.
MariaDB 10 and onwards has some fun features though if you are stuck with it. The CONNECT and TokuDB storage engines are very useful and interesting. Parallel, Multi-source, and GTID replication with multiple domains is very easy.
What tech you use is always a compromise between the benefits of what it's good for and the problems you need to work around. In the case of MySQL it's ubiquitous across hosting services, easy to use, very fast once you've tuned it a bit, and there's clients for pretty much every language. You need to weigh those things against all its problems, and often you'll find it's actually a good option if you're doing web work that you need to deploy to environments you have little control over - less so now than 5 years ago admittedly, but that is the reason MySQL is so popular - because before the devops trend that's got web teams running their own servers most sysadmins made MySQL the only database available.
So? No one needs 10 different hosting services. You only need one, and you've been able to choose a (cheap!) one that offers Postgres for many years now.
> easy to use
I strongly disagree, and the entire article is basically rebutting this assertion. It seems easy to use, but silently failing, breaking promises, and being noncompliant with standards are all issues that make MySQL harder to use.
> very fast once you've tuned it a bit
You can tune Postgres as well. It actually optimizes its queries much better than MySQL does, so you can go longer without starting to optimize.
> and there's clients for pretty much every language
Unless you're using some fringe-y language, this isn't an issue either. Some languages have gotten a Postgres client before MySQL, simply because their communities have a culture that's more similar to Postgres.
For 99% of use cases that doesn't really matter though. Google, Facebook, Github, etc all started out using MySQL to drive the data behind their services. Some of them still do. Yes, you have to work around the problems, but it's still a very powerful piece of technology.
A little while back, I needed to use a REGEX_REPLACE() function. I knew MySQL didn't have it built-in, and didn't want to build any half assed userland function for it. I held my breath and looked it up in MariaDB docs, and there it was! Made my morning.
It's the little things that made me happy to switch. Also, my understanding is that InnoDB has some performance gains.
Off the top of my head, I can add that you can't have subselects in views (which is preposterous), nor can you materialize views. Also, I don't believe you can have function-based indexes, and most certainly you can't pivot tables easily and CTEs are not supported.
I think 5.7 (if it's been released) finally brought the ability to create multiple triggers for the same event. Until 5.6 you could specify only one.
In short: MySQL is no fun. Choose Postgres or any other decent system, but just steer clear of the damn dolphin.
Ahahahahahahaha. Thank you. That was amusing and also helpful.
https://mariadb.com/kb/en/mariadb/mariadb-vs-mysql-features/
Sounds like this might get me out of future MySQL pain...
I've found collisions to be quite nice for doing "upserts", either on a constraint or predictable id.
I note that case insensitive collation is also a default for MS-SQL.