50 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
---
 | 
						|
tags:
 | 
						|
  - databases
 | 
						|
---
 | 
						|
 | 
						|
# database indices
 | 
						|
 | 
						|
A database index is best understood by analogy with physical data. Imagine
 | 
						|
needing to find information about a specific topic in a very long book. Without
 | 
						|
being able to turn to the back and consult the index we would need to scan every
 | 
						|
page of the book looking for information on the topic we are seeking.
 | 
						|
 | 
						|
Similarly with a database if we are looking for a specific value in a very long
 | 
						|
table it can be computationally costly and slow to iterate through every row
 | 
						|
looking for a specific value (this is known as a "full table scan").
 | 
						|
 | 
						|
For this reason we use indexes. In a database an index is like a shortcut or
 | 
						|
quick reference guide. However instead of page numbers as in the book analogy,
 | 
						|
the database index has pointers to the actual location of the rows in the table.
 | 
						|
If an index is applied to a given column, when an element in that column is
 | 
						|
requested, the database will not scan every row, instead it will go straight to
 | 
						|
the element using the index.
 | 
						|
 | 
						|
Say we are looking for the surname "Bishop" in a table that consists of
 | 
						|
`lastName` and `phoneNumber` . If we apply an index to the `lastName` column,
 | 
						|
the database will have a direct reference to the row that "Bishop" is in and
 | 
						|
thus can return the `phoneNumber` value more quickly.
 | 
						|
 | 
						|
Although the programmer can explicitly create indexes, the way the database
 | 
						|
utilises it is largely abstracted from view. Most RDMSs will automatically
 | 
						|
decide which index to use for query optimisation however the programmer can also
 | 
						|
use hints to force the use of a specific index.
 | 
						|
 | 
						|
The main thing is to think about data points that would benefit from an index,
 | 
						|
for instance for the most heavily used queries or those that run against the
 | 
						|
longest tables.
 | 
						|
 | 
						|
While indices make lookups more performant, they should be used judiciously as
 | 
						|
they increase the storage space the database requires and can incresae the
 | 
						|
execution time of queries that insert or update records. (This makes sense, as
 | 
						|
any update to a row, requires a reindexation of the table.)
 | 
						|
 | 
						|
The best use case for an index is for data retrieval that utilises `WHERE`
 | 
						|
clauses.
 | 
						|
 | 
						|
## SQL syntax
 | 
						|
 | 
						|
```sql
 | 
						|
CREATE INDEX index_name ON table_name(column_name)
 | 
						|
```
 |