CCNC/CCNC Module 5/The database application/Database Design/Database Indexes

What are Database Indexes
An index allows quick access to table data when the fields in the query have an index. The index reduces the amount of work the database has to do to find a record in the database. Without an index the database would have to look at EVERY record until it found the one it was looking for. When an index is applied to a field the database can use the index to significantly reduce the amount of work to find the specified record. It isn't that different than using file folders with index tabs so you can jump straight to the folder that contains the record you are looking for. Primary key values will have indexes automatically applied when the table is first created and most key value columns should be considered candidates for indexes (particularly a foreign key). 

Applying Indexes
When you design a table you can define the indexes on one or more columns. These indexes will be utilized when you build database queries and reports. They will decrease the amount of time it takes for the specific data to be retrieved from the database. Designing indexes takes a little thought and can be done by asking yourself a few simple questions; What do you mean by a scan? The term scan refers to a table scan and this occurs when a database search looks at every record in a table to find the record it is looking for. It is analogous to having to read every page of a book to find a subject of importance. In most situations you would look in the books index to find a reference to the subject and use the page number to find the information you seek.
 * 1) what columns will I refer to when retrieving records? (example; a last_name column is often used in identifying a record, it would therefore be a good candidate for an index)
 * 2) is there a variety of values in the column I am considering for an index? (example; if your table had a column named country and 90% of the records were from the same country an index on the country column wouldn't help performance for most of the time it would still have to scan through almost all the records)