Математика

Физика

Химия

Биология

Техника и    технологии

Expert MySQL -Charles A. Bell 2007 ctr543
Expert MySQL -Charles A. Bell 2007 ctr543


Contents at a Glance
About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii
PART 1 ¦ ¦ ¦ Getting Started with
MySQL Development
¦CHAPTER 1 MySQL and the Open Source Revolution . . . . . . . . . . . . . . . . . . . . . . . 3
¦CHAPTER 2 The Anatomy of a Database System . . . . . . . . . . . . . . . . . . . . . . . . . . 25
¦CHAPTER 3 A Tour of the MySQL Source Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
¦CHAPTER 4 Test-Driven MySQL Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
PART 2 ¦ ¦ ¦ Extending MySQL
¦CHAPTER 5 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
¦CHAPTER 6 Embedded MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
¦CHAPTER 7 Building Your Own Storage Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
¦CHAPTER 8 Adding Functions and Commands to MySQL . . . . . . . . . . . . . . . . . . 357
PART 3 ¦ ¦ ¦ Advanced Database Internals
¦CHAPTER 9 Database System Internals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
¦CHAPTER 10 Internal Query Representation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
¦CHAPTER 11 Query Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
¦CHAPTER 12 Query Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
¦APPENDIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
¦INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545

v
Contents
About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii
PART 1 ¦ ¦ ¦ Getting Started with
MySQL Development
¦CHAPTER 1 MySQL and the Open Source Revolution . . . . . . . . . . . . . . . . . . 3
What Is Open Source Software? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Why Use Open Source Software? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Is Open Source Really a Threat to Commercial Software? . . . . . . . . 8
Legal Issues and the GNU Manifesto . . . . . . . . . . . . . . . . . . . . . . . . . 10
Let the Revolution Continue! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Developing with MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Why Modify MySQL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
What Can You Modify in MySQL? Are There Limits? . . . . . . . . . . . . 16
MySQL Licensing Explained. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
So, Can You Modify MySQL or Not? . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Guidelines for Modifying MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
A Real-World Example: TiVo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
¦CHAPTER 2 The Anatomy of a Database System . . . . . . . . . . . . . . . . . . . . . 25
Database System Architectures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Types of Database Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Object-Oriented Database Systems . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Object-Relational Database Systems . . . . . . . . . . . . . . . . . . . . . . . . . 26
Relational Database Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
vi ¦CONTENTS
Relational Database System Architecture . . . . . . . . . . . . . . . . . . . . . . . . . 30
Client Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Query Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Query Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Query Optimizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Internal Representation of Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Query Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
File Access. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Query Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Relational Database Architecture Summary . . . . . . . . . . . . . . . . . . . 43
The MySQL Database System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
MySQL System Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
SQL Interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Parser. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Query Optimizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Query Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Query Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Cache and Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
File Access via Pluggable Storage Engines . . . . . . . . . . . . . . . . . . . . 53
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
¦CHAPTER 3 A Tour of the MySQL Source Code . . . . . . . . . . . . . . . . . . . . . . . . 63
Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Understanding the Licensing Options. . . . . . . . . . . . . . . . . . . . . . . . . 63
Getting the Source Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
The MySQL Source Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
The main() Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Handling Connections and Creating Threads. . . . . . . . . . . . . . . . . . . 76
Parsing the Query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Preparing the Query for Optimization . . . . . . . . . . . . . . . . . . . . . . . . . 90
Optimizing the Query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Executing the Query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Supporting Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Important Classes and Structures. . . . . . . . . . . . . . . . . . . . . . . . . . . 100
¦CONTENTS vii
Coding Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
General Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Functions and Parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Naming Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Spacing and Indenting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Documentation Utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Keeping an Engineering Logbook . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Tracking Your Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Building the System for the First Time . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
¦CHAPTER 4 Test-Driven MySQL Development . . . . . . . . . . . . . . . . . . . . . . . 121
Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Why Test? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Benchmarking. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Profiling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Introducing Software Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Functional Testing vs. Defect Testing . . . . . . . . . . . . . . . . . . . . . . . 128
MySQL Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Using the MySQL Test Suite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
MySQL Benchmarking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
MySQL Profiling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
PART 2 ¦ ¦ ¦ Extending MySQL
¦CHAPTER 5 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Debugging Explained . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Debugging Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Basic Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Inline Debugging Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Error Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
External Debuggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
viii ¦CONTENTS
Debugging MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Inline Debugging Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Error Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Debugging in Linux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Debugging in Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
¦CHAPTER 6 Embedded MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Building Embedded Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
What Is an Embedded System? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Types of Embedded Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Embedded Database Systems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Embedding MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Methods of Embedding MySQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Resource Requirements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Security Concerns. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Advantages of MySQL Embedding . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Limitations of MySQL Embedding. . . . . . . . . . . . . . . . . . . . . . . . . . . 199
The MySQL C API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Most Commonly Used Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Creating an Embedded Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Initializing the Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Setting Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Connecting to the Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Running Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Retrieving Results. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Cleanup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
Disconnecting from and Finalizing the Server. . . . . . . . . . . . . . . . . 208
Putting It All Together. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Error Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Building Embedded MySQL Applications . . . . . . . . . . . . . . . . . . . . . . . . . 210
Compiling the Library (libmysqld) . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
What About Debugging? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
What About the Data? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Creating a Basic Embedded Server . . . . . . . . . . . . . . . . . . . . . . . . . 215
What About Error Handling? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Embedded Server Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
¦CONTENTS ix
¦CHAPTER 7 Building Your Own Storage Engine . . . . . . . . . . . . . . . . . . . . . . 255
MySQL Pluggable Storage Engine Overview . . . . . . . . . . . . . . . . . . . . . . 255
Basic Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Source Files Needed. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Unexpected Help. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
The Handlerton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
The Handler Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
A Brief Tour of a MySQL Storage Engine . . . . . . . . . . . . . . . . . . . . . 267
The Spartan Storage Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Low-Level I/O Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Stage 1: Stubbing the Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
Stage 2: Working with Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Stage 3: Reading and Writing Data. . . . . . . . . . . . . . . . . . . . . . . . . . 317
Stage 4: Updating and Deleting Data . . . . . . . . . . . . . . . . . . . . . . . . 322
Stage 5: Indexing the Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Stage 6: Adding Transaction Support. . . . . . . . . . . . . . . . . . . . . . . . 351
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
¦CHAPTER 8 Adding Functions and Commands to MySQL . . . . . . . . . . . . 357
Adding User-Defined Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
CREATE FUNCTION Syntax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
DROP FUNCTION Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
Creating a User-Defined Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
Adding a New User-Defined Function . . . . . . . . . . . . . . . . . . . . . . . 364
Adding Native Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Generating the Lexical Hash on Windows . . . . . . . . . . . . . . . . . . . . 372
Generating the Lexical Hash on Linux . . . . . . . . . . . . . . . . . . . . . . . 373
Compiling and Testing the New Native Function . . . . . . . . . . . . . . 373
Adding SQL Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
Adding to the Information Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
x ¦CONTENTS
PART 3 ¦ ¦ ¦ Advanced Database Internals
¦CHAPTER 9 Database System Internals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Query Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
MySQL Query Execution Revisited . . . . . . . . . . . . . . . . . . . . . . . . . . 393
What Is a Compiled Query? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
Exploring MySQL Internals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
Getting Started Using MySQL for Experiments . . . . . . . . . . . . . . . . 395
Limitations and Concerns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
The Database System Internals Experiment . . . . . . . . . . . . . . . . . . . . . . 398
Why an Experiment?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
Overview of the Experiment Project . . . . . . . . . . . . . . . . . . . . . . . . . 399
Components of the Experiment Project . . . . . . . . . . . . . . . . . . . . . . 400
Conducting the Experiments on Linux . . . . . . . . . . . . . . . . . . . . . . . 401
Conducting the Experiments on Windows . . . . . . . . . . . . . . . . . . . . 402
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
¦CHAPTER 10 Internal Query Representation . . . . . . . . . . . . . . . . . . . . . . . . . . 403
The Query Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
Query Transformation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
DBXP Query Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
Implementing DBXP Query Trees in MySQL . . . . . . . . . . . . . . . . . . . . . . 409
Files Added and Changed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
Creating the Tests. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
Stubbing the SELECT DBXP Command . . . . . . . . . . . . . . . . . . . . . . 410
Adding the Query Tree Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
Showing Details of the Query Tree . . . . . . . . . . . . . . . . . . . . . . . . . . 428
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
¦CHAPTER 11 Query Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
Types of Query Optimizers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
Cost-Based Optimizers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
Heuristic Optimizers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
Semantic Optimizers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
Parametric Optimizers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
Heuristic Optimization Revisited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
¦CONTENTS xi
The DBXP Query Optimizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
Designing the Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
Stubbing the SELECT DBXP Command . . . . . . . . . . . . . . . . . . . . . . 446
Important MySQL Structures and Classes . . . . . . . . . . . . . . . . . . . . 449
The DBXP Helper Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Modifications to the Existing Code . . . . . . . . . . . . . . . . . . . . . . . . . . 453
Details of the Heuristic Optimizer . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
Compiling and Testing the Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
¦CHAPTER 12 Query Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
Query Execution Revisited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
Restrict. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
Join. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
DBXP Query Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
Designing the Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
Updating the SELECT DBXP Command . . . . . . . . . . . . . . . . . . . . . . 505
The DBXP Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
Compiling and Testing the Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534
¦APPENDIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
Bibliography . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
Database Theory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
General. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536
MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536
Open Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536
Web Sites. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536
Sample Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
Chapter Exercise Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540
Chapter 10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540
Chapter 11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
Chapter 12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543

Цена: 200руб.

Назад

Заказ

На главную страницу