Indexes are special lookup tables that the database search engine can use to speed up searches and queries. An index in a database is very similar to an index in the back of a book. It is used to efficiently find all rows matching a column in your query and then walk through that subset of the table for exact matches. If you don’t have indexes then every row in the table will be checked.
An index will speed up your SELECT queries but will slow down data input, i.e. when you use UPDATE or INSERT statements.
Creating an index involves the CREATE INDEX statement, which allows you to name the index, to specify the table and which column or columns to index, and to indicate whether the index is in ascending or descending order.
Whatever index you create, take into consideration the column(s) that you may use very frequently in a query’s WHERE clause as filter conditions.
A single-column index is one that is created based on only one table column.
The index can be unique, whereby you cannot have duplicate values in that column, or a Primary Key which in some storage engines defines where in the database file the value is stored. Creating a unique index “provides additional information for the query optimizer that can produce more efficient execution plans”, as per SQL Server Index Design Guide.
A composite index is an index on two or more columns of a table.
Implicit indexes are indexes that are automatically created by the database server when an object is created. Indexes are automatically created for primary key constraints and unique constraints.
Hash Table Index
Hash tables are another data structure that can be used as indexes – known as hash indexes. Hash indexes are used because hash tables are extremely efficient when it comes to just looking up values. The only thing you must keep in mind is that hash table is only good for looking up key value pairs, i.e. equality rather than a range of values.
A table that does not have a clustered index is referred to as a HEAP and a table that has a clustered index is referred to as a clustered table (although a HEAP table can have a non-clustered index – but that’s for another time).