before: 'Hmm, I need to do the thing with the data'; hack together SQL in Squirrel until it gives the correct answer; copy SQL into program; think 'it worked in dev and test' when it turns out to be horribly slow in production; sprinkle indexes; see moderate improvements; leave alone.
now: 'Hmm, I need to do the thing with the data'; write SQL to get data, bearing in mind table indexes, join criteria, and the ease with which the database optimiser will be able to narrow down to the target data; run explain plans and check costs; remember that I need real data volumes for the explain plans to be representative of production, and repeat; copy SQL into program; never hear about it again.
And all in less than two hundred pages which--while they could be quickly summarised as 'use indexes effectively'--don't waste any time with history lessons, edge-cases, or other forms of padding. Throughout this, it still manages to highlight the differences between Oracle, SQL Server, MySQL and PostgreSQL.
I can't really offer any criticism here, hence the five stars, but if there is ever going to be a follow up then I'd like to see some coverage of DB2.
With a very well explained content and examples, this book should be compulsory for architects, programmers and database administrators. This book uses a simple language to explain advanced topics about SQL, performance and relational databases. I recommend strongly!
It's rare to find a book that covers a breadth of detail in such a concise and clear way and the practical real-world relevance of everything covered is quite unique. The fact that the book not only covers but also explains the subtleties of different database engines (MySQL and Oracle were important here) is brilliant. It's not only really helped in understanding and optimising legacy implementations here but has made it possible to take better informed decisions going forward as well. Money very well spent in the grand scheme of things.