15 Query Execution ------------------- 15.1 Introduction to Physical-Query-Plan Operators (All) 15.2 One-Pass Algorithms for Database Operations (All) 15.3 Nested-Loop Joins (All) 15.4 Two-Pass Algorithms Based on Sorting (All) 15.5 Two-Pass Algorithms Based on Hashing (All) 15.6 Index-Based Algorithms (All) 15.9 Parallel Algorithms for Relational Operations (All) 16 The Query Compiler --------------------- 16.1 Parsing (All) 16.2 Algebraic Laws for Improving Query Plans (All) 16.3 From Parse Trees to Logical Query Plans 16.3.1 Conversion to Relational Algebra 16.3.3 Improving the Logical Query Plan 16.3.4 Grouping Associative/Commutative Operators 16.4 Estimating the Cost of Operations (All) 16.5 Introduction to Cost-Based Plan Selection (All) 16.6 Choosing an Order for Joins (All except 16.6.5) 16.7 Completing the Physical-Query-Plan (All) 17 Coping With System Failures ------------------------------ 17.1 Issues and Models for Resilient Operation (All) 17.2 Undo Logging (All) 17.3 Redo Logging (All) 18 Concurrency Control ---------------------- 18.1 Serial and Serializable Schedules (All) 18.2 Conflict-Serializability (All) 18.3 Enforcing Serializability by Locks (All) 18.4 Locking Systems With Several Lock Modes (All) 18.8 Concurrency Control by Timestamps (All except 18.8.5)