Preface |
|
xv | |
Organization |
|
xvi | |
Usage Examples |
|
xvii | |
Literature Summaries and Bibliography |
|
xviii | |
Feedback and Errata |
|
xviii | |
Acknowledgments |
|
xix | |
|
Introduction to Physical Database Design |
|
|
1 | (14) |
|
Motivation---The Growth of Data and Increasing Relevance of Physical Database Design |
|
|
2 | (3) |
|
|
5 | (2) |
|
Elements of Physical Design: Indexing, Partitioning, and Clustering |
|
|
7 | (4) |
|
|
8 | (1) |
|
|
9 | (1) |
|
Partitioning and Multidimensional Clustering |
|
|
10 | (1) |
|
Other Methods for Physical Database Design |
|
|
10 | (1) |
|
Why Physical Design Is Hard |
|
|
11 | (1) |
|
|
12 | (3) |
|
|
15 | (16) |
|
|
16 | (4) |
|
|
20 | (5) |
|
|
24 | (1) |
|
|
24 | (1) |
|
|
25 | (2) |
|
|
27 | (1) |
|
|
28 | (1) |
|
|
28 | (3) |
|
Query Optimization and Plan Selection |
|
|
31 | (22) |
|
Query Processing and Optimization |
|
|
32 | (1) |
|
Useful Optimization Features in Database Systems |
|
|
32 | (2) |
|
Query Transformation or Rewrite |
|
|
32 | (1) |
|
Query Execution Plan Viewing |
|
|
33 | (1) |
|
|
33 | (1) |
|
Query Execution Plan Hints |
|
|
33 | (1) |
|
|
34 | (1) |
|
Query Cost Evaluation---An Example |
|
|
34 | (7) |
|
|
34 | (7) |
|
Query Execution Plan Development |
|
|
41 | (2) |
|
Transformation Rules for Query Execution Plans |
|
|
42 | (1) |
|
Query Execution Plan Restructuring Algorithm |
|
|
42 | (1) |
|
Selectivity Factors, Table Size, and Query Cost Estimation |
|
|
43 | (7) |
|
Estimating Selectivity Factor for a Selection Operation or Predicate |
|
|
43 | (2) |
|
|
45 | (1) |
|
Estimating the Selectivity Factor for a Join |
|
|
46 | (1) |
|
|
46 | (3) |
|
Example Estimations of Query Execution Plan Table Sizes |
|
|
49 | (1) |
|
|
50 | (1) |
|
|
51 | (2) |
|
|
53 | (18) |
|
Indexing Concepts and Terminology |
|
|
53 | (2) |
|
|
54 | (1) |
|
Access Methods for Indexes |
|
|
55 | (1) |
|
|
55 | (3) |
|
Index Selection Decisions |
|
|
58 | (4) |
|
|
62 | (7) |
|
|
62 | (3) |
|
|
65 | (1) |
|
|
65 | (1) |
|
|
66 | (1) |
|
|
67 | (2) |
|
|
69 | (1) |
|
|
70 | (1) |
|
Selecting Materialized Views |
|
|
71 | (26) |
|
Simple View Materialization |
|
|
72 | (5) |
|
|
77 | (7) |
|
Exploiting Grouping and Generalization |
|
|
84 | (2) |
|
|
86 | (3) |
|
Examples: The Good, the Bad, and the Ugly |
|
|
89 | (3) |
|
Usage Syntax and Examples |
|
|
92 | (3) |
|
|
95 | (1) |
|
|
96 | (1) |
|
Shared-nothing Partitioning |
|
|
97 | (28) |
|
Understanding Shared-nothing Partitioning |
|
|
98 | (3) |
|
Shared-nothing Architecture |
|
|
98 | (2) |
|
Why Shared Nothing Scales So Well |
|
|
100 | (1) |
|
More Key Concepts and Terms |
|
|
101 | (1) |
|
|
101 | (2) |
|
Pros and Cons of Shared Nothing |
|
|
103 | (3) |
|
|
106 | (2) |
|
Design Challenges: Skew and Join Collocation |
|
|
108 | (2) |
|
|
108 | (1) |
|
|
109 | (1) |
|
Database Design Tips for Reducing Cross-node Data Shipping |
|
|
110 | (7) |
|
|
110 | (1) |
|
Materialized View Replication and Other Duplication Techniques |
|
|
111 | (4) |
|
The Internode Interconnect |
|
|
115 | (2) |
|
|
117 | (3) |
|
|
117 | (2) |
|
Logical Nodes versus Physical Nodes |
|
|
119 | (1) |
|
|
120 | (1) |
|
|
120 | (1) |
|
|
121 | (1) |
|
|
122 | (3) |
|
|
125 | (18) |
|
Range Partitioning Basics |
|
|
126 | (2) |
|
|
128 | (1) |
|
Essentials of List Partitioning |
|
|
128 | (1) |
|
Composite Range and List Partitioning |
|
|
128 | (1) |
|
|
129 | (2) |
|
Administration and Fast Roll-in and Roll-out |
|
|
131 | (3) |
|
|
131 | (2) |
|
|
133 | (1) |
|
|
134 | (1) |
|
|
135 | (3) |
|
Indexing Range Partitioned Data |
|
|
138 | (1) |
|
Range Partitioning and Clustering Indexes |
|
|
139 | (1) |
|
The Full Gestalt: Composite Range and Hash Partitioning with Multidimensional Clustering |
|
|
139 | (3) |
|
|
142 | (1) |
|
|
142 | (1) |
|
Multidimensional Clustering |
|
|
143 | (24) |
|
|
144 | (7) |
|
Why Clustering Helps So Much |
|
|
144 | (1) |
|
|
145 | (6) |
|
Syntax for Creating MDC Tables |
|
|
151 | (1) |
|
Performance Benefits of MDC |
|
|
151 | (1) |
|
Not Just Query Performance: Designing for Roll-in and Roll-out |
|
|
152 | (1) |
|
Examples of Queries Benefiting from MDC |
|
|
153 | (4) |
|
|
157 | (2) |
|
|
159 | (6) |
|
Constraining the Storage Expansion Using Coarsification |
|
|
159 | (3) |
|
Monotonicity for MDC Exploitation |
|
|
162 | (1) |
|
Picking the Right Dimensions |
|
|
163 | (2) |
|
|
165 | (1) |
|
|
166 | (1) |
|
The Interdependence Problem |
|
|
167 | (10) |
|
Strong and Weak Dependency Analysis |
|
|
168 | (2) |
|
Pain-first Waterfall Strategy |
|
|
170 | (1) |
|
Impact-first Waterfall Strategy |
|
|
171 | (1) |
|
Greedy Algorithm for Change Management |
|
|
172 | (1) |
|
The Popular Strategy (the Chicken Soup Algorithm) |
|
|
173 | (2) |
|
|
175 | (1) |
|
|
175 | (2) |
|
Counting and Data Sampling in Physical Design Exploration |
|
|
177 | (20) |
|
Application to Physical Database Design |
|
|
178 | (6) |
|
Counting for Index Design |
|
|
180 | (1) |
|
Counting for Materialized View Design |
|
|
180 | (2) |
|
Counting for Multidimensional Clustering Design |
|
|
182 | (1) |
|
Counting for Shared-nothing Partitioning Design |
|
|
183 | (1) |
|
|
184 | (8) |
|
The Benefits of Sampling with SQL |
|
|
184 | (1) |
|
Sampling for Database Design |
|
|
185 | (4) |
|
|
189 | (3) |
|
Repeatability with Sampling |
|
|
192 | (1) |
|
|
192 | (2) |
|
|
194 | (1) |
|
|
195 | (2) |
|
Query Execution Plans and Physical Design |
|
|
197 | (26) |
|
Getting from Query Text to Result Set |
|
|
198 | (3) |
|
What Do Query Execution Plans Look Like? |
|
|
201 | (1) |
|
|
201 | (4) |
|
Exploring Query Execution Plans to Improve Database Design |
|
|
205 | (6) |
|
Query Execution Plan Indicators for Improved Physical Database Designs |
|
|
211 | (3) |
|
Exploring without Changing the Database |
|
|
214 | (1) |
|
Forcing the Issue When the Query Optimizer Chooses Wrong |
|
|
215 | (5) |
|
Three Essential Strategies |
|
|
215 | (1) |
|
Introduction to Query Hints |
|
|
216 | (3) |
|
Query Hints When the SQL Is Not Available to Modify |
|
|
219 | (1) |
|
|
220 | (1) |
|
|
220 | (3) |
|
Automated Physical Database Design |
|
|
223 | (42) |
|
What-if Analysis, Indexes, and Beyond |
|
|
225 | (4) |
|
Automated Design Features from Oracle, DB2, and SQL Server |
|
|
229 | (11) |
|
|
231 | (3) |
|
Microsoft SQL Server Database Tuning Advisor |
|
|
234 | (4) |
|
Oracle SQL Access Advisor |
|
|
238 | (2) |
|
Data Sampling for Improved Statistics during Analysis |
|
|
240 | (2) |
|
Scalability and Workload Compression |
|
|
242 | (5) |
|
Design Exploration between Test and Production Systems |
|
|
247 | (1) |
|
Experimental Results from Published Literature |
|
|
248 | (6) |
|
|
254 | (1) |
|
Materialized View Selection |
|
|
254 | (2) |
|
Multidimensional Clustering Selection |
|
|
256 | (2) |
|
Shared-nothing Partitioning |
|
|
258 | (2) |
|
Range Partitioning Design |
|
|
260 | (2) |
|
|
262 | (1) |
|
|
262 | (3) |
|
Down to the Metal: Server Resources and Topology |
|
|
265 | (52) |
|
What You Need to Know about CPU Architecture and Trends |
|
|
266 | (5) |
|
|
266 | (3) |
|
Amdahl's Law for System Speedup with Parallel Processing |
|
|
269 | (2) |
|
|
271 | (1) |
|
Client Server Architectures |
|
|
271 | (2) |
|
Symmetric Multiprocessors and NUMA |
|
|
273 | (2) |
|
Symmetric Multiprocessors and NUMA |
|
|
273 | (1) |
|
Cache Coherence and False Sharing |
|
|
274 | (1) |
|
|
275 | (1) |
|
A Little about Operating Systems |
|
|
275 | (1) |
|
|
276 | (3) |
|
Disks, Spindles, and Striping |
|
|
277 | (1) |
|
Storage Area Networks and Network Attached Storage |
|
|
278 | (1) |
|
Making Storage Both Reliable and Fast Using RAID |
|
|
279 | (9) |
|
|
279 | (2) |
|
|
281 | (1) |
|
|
281 | (1) |
|
|
282 | (2) |
|
|
284 | (1) |
|
|
284 | (1) |
|
|
285 | (1) |
|
|
285 | (1) |
|
|
286 | (2) |
|
Which RAID Is Right for Your Database Requirements? |
|
|
288 | (1) |
|
Balancing Resources in a Database Server |
|
|
288 | (2) |
|
Strategies for Availability and Recovery |
|
|
290 | (5) |
|
Main Memory and Database Tuning |
|
|
295 | (19) |
|
Memory Tuning by Mere Mortals |
|
|
295 | (3) |
|
|
298 | (3) |
|
Cutting Edge: The Latest Strategy in Self-tuning Memory Management |
|
|
301 | (13) |
|
|
314 | (1) |
|
|
314 | (3) |
|
Physical Design for Decision Supports, Warehousing, and OLAP |
|
|
317 | (20) |
|
|
318 | (2) |
|
|
320 | (1) |
|
Star and Snowflake Schemas |
|
|
321 | (2) |
|
|
323 | (4) |
|
|
327 | (1) |
|
DSS, Warehousing, and OLAP Design Considerations |
|
|
328 | (1) |
|
Usage Syntax and Examples for Major Database Servers |
|
|
329 | (4) |
|
|
330 | (1) |
|
Microsoft's Analysis Services |
|
|
331 | (2) |
|
|
333 | (1) |
|
|
334 | (3) |
|
|
337 | (20) |
|
|
338 | (4) |
|
Common Types of Denormalization |
|
|
342 | (4) |
|
Two Entities in a One-to-One Relationship |
|
|
342 | (1) |
|
Two Entities in a One-to-many Relationship |
|
|
343 | (3) |
|
Table Denormalization Strategy |
|
|
346 | (1) |
|
Example of Denormalization |
|
|
347 | (7) |
|
Requirements Specification |
|
|
347 | (2) |
|
|
349 | (1) |
|
Schema Refinement Using Denormalization |
|
|
350 | (4) |
|
|
354 | (1) |
|
|
354 | (3) |
|
Distributed Data Allocation |
|
|
357 | (14) |
|
|
358 | (2) |
|
Distributed Database Allocation |
|
|
360 | (2) |
|
Replicated Data Allocation---``All-beneficial Sites'' Method |
|
|
362 | (5) |
|
|
362 | (5) |
|
Progressive Table Allocation Method |
|
|
367 | (1) |
|
|
368 | (1) |
|
|
369 | (2) |
|
Appendix A A Simple Performance Model for Databases |
|
|
371 | (4) |
|
I/O Time Cost---Individual Block Access |
|
|
371 | (1) |
|
I/O Time Cost---Table Scans and Sorts |
|
|
372 | (1) |
|
|
372 | (2) |
|
|
374 | (1) |
|
Appendix B Technical Comparison of DB2 HADR with Oracle Data Guard for Database Disaster Recovery |
|
|
375 | (4) |
|
Standby Remains ``Hot'' during Failover |
|
|
376 | (1) |
|
|
377 | (1) |
|
|
377 | (1) |
|
Support for Multiple Standby Servers |
|
|
377 | (1) |
|
Support for Read on the Standby Server |
|
|
377 | (1) |
|
Primary Can Be Easily Reintegrated after Failover |
|
|
378 | (1) |
Glossary |
|
379 | (12) |
Bibliography |
|
391 | (20) |
Index |
|
411 | (16) |
About the Authors |
|
427 | |