Математика | ||||
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руб. |
||||