Preface — Why is indexing a development task?
Anatomy of an Index — What does an index look like?
The Leaf Nodes — A doubly linked list
The B-Tree — It’s a balanced tree
Slow Indexes, Part I — Two ingredients make the index slow
The Where Clause — Indexing to improve search performance
The Equals Operator — Exact key lookup
Primary Keys — Verifying index usage
Concatenated Keys — Multi-column indexes
Slow Indexes, Part II — The first ingredient, revisited
Functions — Using functions in the
whereclauseCase-Insensitive Search —
UPPERandLOWERUser-Defined Functions — Limitations of function-based indexes
Over-Indexing — Avoid redundancy
Bind Variables — For security and performance
Searching for Ranges — Beyond equality
Greater, Less and
BETWEEN— The column order revisitedIndexing SQL
LIKEFilters —LIKEis not for full-text searchIndex Combine — Why not using one index for every column?
Partial Indexes — Indexing selected rows
NULLin the Oracle Database — An important curiosityNULLin Indexes — Every index is a partial indexNOT NULLConstraints — affect index usageEmulating Partial Indexes — using function-based indexing
Obfuscated Conditions — Common anti-patterns
Dates — Pay special attention to
DATEtypesNumeric Strings — Don’t mix types
Combining Columns — use redundant
whereclausesSmart Logic — The smartest way to make SQL slow
Math — Databases don’t solve equations
Testing and Scalability — About hardware
Data Volume — Sloppy indexing bites back
System Load — Production load affects response time
Response Time and Throughput — Horizontal scalability
The Join Operation — Not slow, if done right
Nested Loops — About the N+1 selects problem in ORM
Hash Join — Requires an entirely different indexing approach
Sort-Merge Join — Like a zipper on two sorted sets
Clustering Data — To reduce IO
Index Filter Predicates Intentionally Used — to tune
LIKEIndex-Only Scan — Avoiding table access
Index-Organized Table — Clustered indexes without tables
Sorting and Grouping — Pipelined
order by: the third powerIndexed Order By —
whereclause interactionsASC/DESCandNULL FIRST/LAST— changing index orderIndexed Group By — Pipelining
group by
Partial Results — Paging efficiently
Selecting Top-N Rows — if you need the first few rows only
Fetching The Next Page — The offset and seek methods compared
Window-Functions — Pagination using analytic queries
Insert, Delete and Update — Indexing impacts on DML statements
If you like this page, you might also like …
… to subscribe my mailing lists, get free stickers, buy my book or join a training.
Execution plans — getting and reading database execution plans
Myth Directory — Common myth and misbeliefs
Example Schema —
CREATEandINSERTscriptsGlossary — Important terms briefly explained

