Extra access structures, or indexes, can be created on a file.
The previous approaches accessed records with a binary search on the index file, then direct access to the block containing the record. Since the first-level index is ordered and key on the index value, the remaining levels can all be nondense and block-pointing.
For example, if you have a table that contains both billed and unbilled orders where the unbilled orders take up a small fraction of the total table and yet that is an often used section, you can improve performance by creating an index on just that portion.
Another possible application is to use , that is, their results must depend only on their arguments and never on any outside influence (such as the contents of another table or the current time).
If so, the block is unlinked from its old location in the B*-tree structure and linked into its new location.
If not, it is either skipped over or unlinked from the free list, depending on whether it has extant index entries without pending deletes.