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)
|
|
```
|