Bases de datos

Índices

Índices

En bases de datos, un índice es una tabla especial que se usa para agilizar los procesos de búsqueda y recuperación de datos

 

En un sentido técnico, son tablas que contienen apuntadores a la información guardada en una tabla

 

Aunque ocupan espacio en un disco duro, no son accesibles directamente para los usuarios

Índices

matricula nombre apellido
Miguel
Carlos
Alberto
Juan
Vicente
Manuel
Lucas
Noé
Uriel
SELECT
	matricula, nombre, apellido
WHERE
	nombre = "Uriel"

La búsqueda en una columna no indexada se da registro a registro

Índices

matricula nombre apellido
Miguel
Carlos
Alberto
Juan
Vicente
Manuel
Lucas
Noé
Uriel
SELECT
	matricula, nombre, apellido
WHERE
	nombre = "Uriel"

La búsqueda en una columna no indexada se da registro a registro

Índices

matricula nombre apellido
Miguel
Carlos
Alberto
Juan
Vicente
Manuel
Lucas
Noé
Uriel
SELECT
	matricula, nombre, apellido
WHERE
	nombre = "Uriel"

La búsqueda en una columna no indexada se da registro a registro

Índices

matricula nombre apellido
Miguel
Carlos
Alberto
Juan
Vicente
Manuel
Lucas
Noé
Uriel
SELECT
	matricula, nombre, apellido
WHERE
	nombre = "Uriel"

La búsqueda en una columna no indexada se da registro a registro

Índices

matricula nombre apellido
Miguel
Carlos
Alberto
Juan
Vicente
Manuel
Lucas
Noé
Uriel
SELECT
	matricula, nombre, apellido
WHERE
	nombre = "Uriel"

La búsqueda en una columna no indexada se da registro a registro

Índices

matricula nombre apellido
Miguel
Carlos
Alberto
Juan
Vicente
Manuel
Lucas
Noé
Uriel
SELECT
	matricula, nombre, apellido
WHERE
	nombre = "Uriel"

La búsqueda en una columna no indexada se da registro a registro

Índices

matricula nombre apellido
Miguel
Carlos
Alberto
Juan
Vicente
Manuel
Lucas
Noé
Uriel
SELECT
	matricula, nombre, apellido
WHERE
	nombre = "Uriel"

La búsqueda en una columna no indexada se da registro a registro

Índices

matricula nombre apellido
Miguel
Carlos
Alberto
Juan
Vicente
Manuel
Lucas
Noé
Uriel
SELECT
	matricula, nombre, apellido
WHERE
	nombre = "Uriel"

La búsqueda en una columna no indexada se da registro a registro

Índices

matricula nombre apellido
Miguel
Carlos
Alberto
Juan
Vicente
Manuel
Lucas
Noé
Uriel
SELECT
	matricula, nombre, apellido
WHERE
	nombre = "Uriel"

La búsqueda en una columna no indexada se da registro a registro

Índices

matricula nombre apellido
Miguel
Carlos
Alberto
Juan
Vicente
Manuel
Lucas
Noé
Uriel
SELECT
	matricula, nombre, apellido
WHERE
	nombre = "Uriel"

La búsqueda en una columna no indexada se da registro a registro

Índices

matricula nombre apellido
Miguel
Carlos
Alberto
Juan
Vicente
Manuel
Lucas
Noé
Uriel
SELECT
	matricula, nombre, apellido
WHERE
	nombre = "Uriel"

Hasta que encuentra lo que está buscando

Índices

matricula nombre apellido
Alberto
Carlos
Juan
Lucas
Manuel
Miguel
Noé
Uriel
Vicente
SELECT
	matricula, nombre, apellido
WHERE
	nombre = "Uriel"

Imaginemos que la columna "nombre" estuviera ordenada alfabéticamente

Índices

matricula nombre apellido
Alberto
Carlos
Juan
Lucas
Manuel
Miguel
Noé
Uriel
Vicente
SELECT
	matricula, nombre, apellido
WHERE
	nombre = "Uriel"

Imaginemos que la columna "nombre" estuviera ordenada alfabéticamente

Índices

matricula nombre apellido
Alberto
Carlos
Juan
Lucas
Manuel
Miguel
Noé
Uriel
Vicente
SELECT
	matricula, nombre, apellido
WHERE
	nombre = "Uriel"

Imaginemos que la columna "nombre" estuviera ordenada alfabéticamente

Índices

matricula nombre apellido
Alberto
Carlos
Juan
Lucas
Manuel
Miguel
Noé
Uriel
Vicente
SELECT
	matricula, nombre, apellido
WHERE
	nombre = "Uriel"

Imaginemos que la columna "nombre" estuviera ordenada alfabéticamente

Índices

matricula nombre apellido
Alberto
Carlos
Juan
Lucas
Manuel
Miguel
Noé
Uriel
Vicente
SELECT
	matricula, nombre, apellido
WHERE
	nombre = "Uriel"

Bastaron 3 saltos para encontrar lo que se busca

Índices

matricula nombre apellido
3 Miguel
5 Carlos
12 Alberto
6 Juan
7 Vicente
9 Manuel
4 Lucas
11 Noé
8 Uriel
nombre matricula
Alberto 12
Carlos 5
Juan 6
Lucas 4
Manuel 9
Miguel 3
Noé 11
Uriel 8
Vicente 7

Índices

matricula nombre apellido
3 Miguel
5 Carlos
12 Alberto
6 Juan
7 Vicente
9 Manuel
4 Lucas
11 Noé
8 Uriel
nombre matricula
Alberto 12
Carlos 5
Juan 6
Lucas 4
Manuel 9
Miguel 3
Noé 11
Uriel 8
Vicente 7

Índices

El almacenamiento y la búsqueda de cualquier índice se hace mediante árboles - B

  • ¡Saludos, estructuras de datos!

Índices

Hay dos tipos generales de índices:

  • Agrupados
  • Desagrupados

Índices agrupados

Este tipo de índices se conforman, básicamente, con la clave primaria de una tabla y garantizan que esta clave se registre en orden ascendente y que corresponde a la forma física en que la tabla se almacena en el disco duro de una base de datos

  • No es necesario declararlos de manera explícita
  • Se crean al mismo tiempo que cada tabla

Índices desagrupados

Este tipo de índices son referencias ordenadas para un campo específico (o combinación de campos) que apuntan a las entradas de una tabla

Índices desagrupados

matricula nombre apellido
3 Miguel
4 Lucas
5 Carlos
6 Juan
7 Vicente
8 Uriel
9 Manuel
11 Noé
12 Alberto
nombre matricula
Alberto 12
Carlos 5
Juan 6
Lucas 4
Manuel 9
Miguel 3
Noé 11
Uriel 8
Vicente 7

Índices desagrupados

Este tipo de índices son referencias ordenadas para un campo específico (o combinación de campos) que apuntan a las entradas de una tabla

  • Se usan para mejorar la velocidad de búsqueda en una tabla
  • Se pueden crear/modificar después de la creación de una tabla
  • No son tablas nuevas, sólo son referencias ordenadas hacia una tabla

Tipos de índices desagrupados

Cada tipo de índice puede usarse para una sola columna o para un conjunto de columnas

  • En el segundo caso, se les conoce como índices compuestos

 

Los tipos de índices de uso más común son:

  • Generales
  • Únicos
  • De texto completo

 

Dependiendo del SGDB puede haber otros tipos de índice de uso más especializado

Índices generales

CREATE INDEX
	{nombre_del_indice}
ON
	{nombre_de_la_tabla}
    ({columna_1}, {columna_2}, ..., {columna_n});

Se usan cuando tenemos consultas que hacen búsquedas o filtrados sobre la o las columnas involucradas en el índice

 

Si el índice es compuesto, la complejidad de búsqueda depende de la selectividad de cada columna

Índices únicos

CREATE UNIQUE INDEX
	{nombre_del_indice}
ON
	{nombre_de_la_tabla}
    ({columna_1}, {columna_2}, ..., {columna_n});

Se usan cuando queremos que una columna, o combinación de columnas, también sean únicas dentro de una misma tabla

 

Si el índice es compuesto, la complejidad de búsqueda depende de la selectividad de cada columna

CREATE FULLTEXT INDEX
	{nombre_del_indice}
ON
	{nombre_de_la_tabla}
    ({columna_1}, {columna_2}, ..., {columna_n});

Se usan cuando queremos hacer más eficiente la búsqueda dentro de una, o varias, columnas de tipo texto (char, varchar o text)

 

Si el índice es compuesto, la complejidad de búsqueda depende de la selectividad de cada columna

 

Pueden hacer ofrecer resultados por relevancia o con derivación de palabras

Índices de texto completo

CREATE FULLTEXT INDEX
	{nombre_del_indice}
ON
	{nombre_de_la_tabla}
    ({columna_1}, {columna_2}, ..., {columna_n});

Se usan cuando queremos hacer más eficiente la búsqueda dentro de una, o varias, columnas de tipo texto (char, varchar o text)

 

Si el índice es compuesto, la complejidad de búsqueda depende de la selectividad de cada columna

 

Pueden hacer ofrecer resultados por relevancia o con derivación de palabras

Índices de texto completo

Pueden ocupar mucho espacio y en muchos proveedores públicos están deshabilitadas

Eliminar índices

DROP INDEX
	{nombre_del_indice};

Podemos eliminar un índice, sin importar del tipo que sea, con una sola instrucción

Cuando no usar índices

En general no se deben usar en tablas pequeñas

 

Tampoco es recomendable usarlos en columnas que tengan muchos valores nulos o que son manipuladas con frecuencia

 

Se modifican siempre que se agregan o actualizan datos en una tabla

  • En almacenes de datos de gran tamaño es normal que los índices sólo se actualicen en horas de poco tráfico al día en vez de hacerlo constantemente

Bases de datos: Índices

By Gilberto 🦁

Bases de datos: Índices

Índices

  • 51