Indexes have already been described in Chapter 4, PostgreSQL Advanced Building Blocks. Simply speaking, indexes work like a glossary at the end of a book. When searching for a keyword in a book, to make it faster, you can look it up in the glossary and then go to the page specified. The glossary is alphabetically organized; that's why searching in it is fast.
Moreover, when you need to find out whether a keyword is present in the book, you don't have to go to the page – just looking in the glossary is enough.
PostgreSQL can do the same. If all the information that is needed for a query is contained in an index, the database won't perform the scan on the table data and will only use the index. This is called an index-only scan.
To demonstrate how it works, let's create an index for the dwh.access_log_not_partitioned table, as follows...