Índices en MySQL: Tipos, Ventajas y Ejemplos

22/10/2024 | MySQL | 0 comentarios

Optimiza el rendimiento de tus bases de datos MySQL usando índices. Aprende qué son, sus beneficios y cómo aplicarlos.

Descargar archivos


Índices

Los índices son estructuras de datos que facilitan la búsqueda de datos sin tener que revisar todas las filas de una tabla, lo que mejora la velocidad de operaciones como: búsqueda, ordenamiento y unión de tablas.

Para lograr esto los índices ocupan espacio adicional y pueden hacer lentas las operaciones de escritura (insertar, actualizar, eliminar) debido al mantenimiento de los índices.

Ventajas

  • Mejora la velocidad de las consultas: Los índices permiten que las consultas de búsqueda, JOIN, y ordenamiento se ejecuten más rápido.
  • Evita escaneos completos de tabla: Sin índices, se debe revisar cada registro para encontrar las coincidencias, con índices se va directamente a las filas solicitadas.
  • Optimización de operaciones de agrupación y clasificación: Los índices ayudan a que las operaciones de agrupamiento y ordenamiento sean más eficientes.

Desventajas

  • Espacio de almacenamiento: Los índices ocupan espacio en disco, lo que puede ser significativo para tablas grandes.
  • Velocidad de escritura: Insertar, actualizar o eliminar filas en tablas con índices puede ser más lento, ya que MySQL debe actualizar también los índices.

Tipos de índices

Se tiene los siguientes tipos de índices:

ÍndiceKeyDescripción
NormalINDEXÍndice normal, permite valores duplicados. Se usa para mejorar la velocidad de las consultas.
ÚnicoUNIQUEEste índice no permite valores duplicados, excepto que se aceptan valores nulos (NULL).
PrimarioPRIMARYUn índice único, que no aceptar valores duplicados y tampoco valores nulos.
FulltextFULLTEXTÍndice de texto avanzado, lo cual permite búsqueda en campos de texto (TEXT, VARCHAR, CHAR).

Crear Índices

Los índices se crean con la siguiente sintaxis:


CREATE [UNIQUE | FULLTEXT] INDEX index_name ON table_name (column_name);

Como ejemplo vamos a usar una tabla llamada clients con los datos de nuestros clientes (documento, nombres, correo, dirección, teléfono) además de un número auto incremental como índice primario.


CREATE TABLE `clients`
(
    id         INT AUTO_INCREMENT PRIMARY KEY,
    document   VARCHAR(8) NOT NULL,
    firstName  VARCHAR(100) NOT NULL,
    lastName   VARCHAR(100) NOT NULL,
    email      VARCHAR(100) NOT NULL,
    address    VARCHAR(255) NULL,
    phone      INT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

1. Crear un índice único

El documento de identidad del cliente debe ser único, además vamos a usar ese datos para buscar el cliente, por lo tanto se puede crear un índice único con el documento.


CREATE UNIQUE INDEX idx_document ON clients(document);

2. Crear índice simple

Si se requiere buscar a los clientes por la dirección de correo podemos crear un índice:


CREATE INDEX idx_email ON clients(email);

3. Crear un índice compuesto

En caso se requiera la busqueda de clientes por nombre y apellidos, podemos crear un índice compuesto por dos campos.


CREATE INDEX idx_first_last_name ON clients(firstName, lastName);

Consideraciones

  • No todas las columnas deben tener un índice. Se recomienda escoger columnas que se usan frecuentemente en cláusulas WHERE, JOIN, ORDER BY o GROUP BY.
  • Las columnas con alta cardinalidad (muchos valores únicos) son mejores candidatas para tener índices.
  • Los índices ocupan espacio de almacenamiento y tienen impacto en los proceso de escritura.

Conclusiones

Los índices ayudan a mejorar el rendimiento de las consultas en MySQL, pero deben ser usados con cuidado para evitar que los procesos de escritura sean lentos. Implementar índices de manera adecuada mejora la velocidad de consultas, especialmente en sistemas con grandes volúmenes de datos o consultas complejas.

Referencias

Envíar Comentario

En este sitio los comentarios se publican previa aprobación del equipo de Kodetop. Evita los comentarios ofensivos, obscenos o publicitarios. Si deseas publicar código fuente puedes hacerlo entre las etiquedas <pre></pre>