Early relational systems used indices as table replicas that allowed vertical partitioning, allowed associative search, and allowed con- venient data ordering. Database optimizers and executors use semi-join on these structures to run common queries on covering indices. These query strategies give huge speedups. These early ideas evolved to materialized views (often maintained by triggers) that went far beyond simple covering indices and provided fast access to star and snowflake schema. In.