Abstract
The primary expectation for a storage system is that it be fast. To achieve this, two types of approaches can be employed: hardware (moving data up the memory hierarchy, with the highest levels being the fastest) and logical redundancy (creating secondary access structures, such as indexes or materialized views). This course will outline the key advances achieved in parallel through these two approaches. We will also review recent adaptive indexes such as the Radix Tree and the Log-Structured Merge Tree, as well as indexes for finding nearest neighbors, such as Hierarchical Navigable Small World (HNSW).