Skip to content

Indices

Los indices son estructuras de datos que mejoran la velocidad de las operaciones de consulta en una base de datos. Funcionan como un índice en un libro, permitiendo acceder rápidamente a los datos sin tener que recorrer toda la tabla.

¿Por qué usar indices?

Los indices son especialmente útiles en tablas grandes, donde las consultas pueden volverse lentas si se tienen que escanear todas las filas. Al crear un indice, se crea una estructura que permite buscar los datos de manera más eficiente.

Creación de indices

En SQLite, puedes crear un indice utilizando la siguiente sintaxis:

CREATE INDEX nombre_indice ON nombre_tabla (columna1, columna2, ...);

Por ejemplo, en una tabla de empleados:

CREATE TABLE empleados (
    id INTEGER PRIMARY KEY,
    nombre TEXT NOT NULL,
    departamento TEXT NOT NULL,
    salario INTEGER NOT NULL
);

INSERT INTO empleados (id, nombre, departamento, salario) VALUES
(1, 'Juan', 'Ventas', 50000),
(2, 'Ana', 'Marketing', 60000),
(3, 'Luis', 'Ventas', 55000),
(4, 'Marta', 'Recursos Humanos', 70000),
(5, 'Pedro', 'Marketing', 65000);

CREATE INDEX idx_departamento ON empleados (departamento);

Una vez creado el indice, las consultas que filtren por la columna departamento serán más rápidas:

Tipos de indices

Dispones de varios tipos de indices según el tipo de datos y la estructura de la tabla:

  • Indices únicos: Aseguran que los valores en la columna o columnas indexadas sean únicos. Esto es útil para mantener la integridad de los datos.
  • Indices compuestos: Se crean sobre múltiples columnas. Son útiles cuando las consultas filtran por varias columnas al mismo tiempo.
  • Indices parciales: Se crean sobre un subconjunto de filas de una tabla, lo que puede mejorar el rendimiento si solo necesitas acceder a una parte específica de los datos.
  • Indices de texto completo: Se utilizan para mejorar las búsquedas de texto en columnas de tipo texto. Permiten realizar búsquedas más eficientes en grandes volúmenes de datos textuales.
  • Indices espaciales: Se utilizan para datos geoespaciales, permitiendo realizar consultas eficientes en datos que incluyen coordenadas geográficas.
  • Indices hash: Utilizan una función hash para mapear los valores de las columnas a posiciones en el indice, lo que puede mejorar la velocidad de búsqueda en ciertas situaciones.
CREATE UNIQUE INDEX idx_nombre ON empleados (nombre);
CREATE INDEX idx_compuesto ON empleados (departamento, salario);
CREATE INDEX idx_parcial ON empleados (salario) WHERE departamento = 'Ventas';
CREATE VIRTUAL TABLE idx_texto USING fts5(nombre);
CREATE VIRTUAL TABLE idx_espacial USING rtree(id, x1, y1, x2, y2);
CREATE INDEX idx_hash ON empleados USING HASH (nombre);

Eliminar un indice

Para eliminar un indice, se utiliza la siguiente sintaxis:

DROP INDEX nombre_indice;