Most helpful critical review
26 of 29 people found the following review helpful
READERS GAIN: 3/8
on January 26, 2006
This book is rather controversial. I'll begin with a quote from the preface:
...we've written it for users and programmers who want to improve SQL performance, no matter what brand of SQL they use. In this book, you'll find tuning tips for common situations... Rather than exploiting the unique features of a single DBMS, we're going to give you ideas that are good for all of the major SQL DBMSs.
Sounds good, but !
The biggest idea behind this book is that the authors took 8 most common databases (as per 2002: DB2, Informix, Ingres, Interbase, MS SQL, MySQL, Oracle, Sybase) and sort of compared them on many different subjects. I said "sort of" because you won't find specific recommendations like "DB2 does this better", or "this makes the query faster on Oracle". Instead, the authors came up with this idea - upon each discussed topic they summarize the gain that you might possibly get from using that particular technique should you be using it on _all_ of the 8 databases. They put it like:
which means that with the discussed trick in place, x out of 8 databases performed better (and the rest showed no improvement).
Two things make it break - (1) there is only so many tricks that improve on most databases (it's commonly 3/8) and (2) there is no way to tell which of 8 showed an improvement.
And so, how does it help me as a database administrator and developer ? I only work with 2, may be 3 specific database servers and there is no way to tell whether _they_ gained from that trick or not. All I can do is to keep all tricks in mind, apply them all anyway and hope it was my database that had an improvement. Or, I can re-run tests and see for myself.
The word about tests - the authors did run all the tests on the same single CPU Windows NT machine and specifically say:
We should explain that all timing tests for this book were done with a single-CPU computer, so comparisons between DBMSs would be misleading. The results wouldn't give full points to the DBMS with the best threading mechanisms.
This book would make a good source for trivia questions. Tricks and tips all around, but many discussions are too short to be of any use and end up with catch-it-all rules.
Chapter 17: Cost-based optimizers:
About 10 pages. Says that cost-based and rule-based optimizers are different and CBO peform better because they use real statistics. And so you should update statistics and use EXPLAIN and optimizer hints. That's all. Oh no, really ?
Chapter 11. Stored procedures.
Shows very reasonably and truthfully why SPs are useful and better in many situation and what the gotchas are. But then again
When parameter passing is by value, the DBMS usually makes a local copy ... That leads inevitably to the bad idea of declaring parameters to be "input/output" even when they're merely "input" parameters. The trick ... is that an "input/output" parameter value is not recopied down the line if stored procedure #1 calls stored procedure #2 ... it saves you space and copying time.
Bad be the idea or not, passing large amounts on a stack is certainly wrong, not only for SPs and indicates poor design. Otherwise, if you are passing small arguments, and want to optimize out the copying of a single int or varchar - what kind of a system is that ? I mean - you are calling an SP in a database. It begins a transaction, processes a lot of rows, does all the usual DB stuff and commits. And you are saving a single memory copy here ?
And the really performance-wise important topics may be mentioned but skipped, ex.
Chapter 10: Foreign Keys
It's technically possible that a CHECK constraint will not be violated at the time you update a row, but it will be violated by the time the SQL statement ends ... Because of these possibilities, ... DBMS will wait until the end of the statement before testing a constraint for violations. Thus, every row has to be accessed twice-once to change it, and a second time later on to test for constraint violations.
Now, _that_ would be a huge performance hit sometimes. Any discussion ? Clues or hints may be ? Nope. Well, thanks for mentioning anyway (and I'm serious right now).
The book lacks any hardware-related details, ex. how CPU, memory or I/O affect things. It lacks any database-specific details. It lacks any common approach to optimization, there is no single direction in which it leads you.
Therefore, here is my bottom line for this book - a good overview, yes. Many interesting and fascinating details, yes. A lot of hints, oh yes ! Detailed, sometimes. Practical, uhm, unlikely.