sql >> Base de Datos >  >> RDS >> Mysql

Rendimiento de MySQL:cómo aprovechar la indexación de la base de datos MySQL

A lo largo de este tutorial, cubriremos algunos de los fundamentos de la indexación. Como parte de la serie MySQL, presentaremos las capacidades de indexación de MySQL y el papel que desempeña en la optimización del rendimiento de la base de datos. Liquid Web recomienda consultar con un DBA antes de realizar cualquier cambio en su aplicación de nivel de producción.

¿Qué es la indexación?

La indexación es una estructura poderosa en MySQL que se puede aprovechar para obtener los tiempos de respuesta más rápidos de las consultas comunes. Las consultas de MySQL logran eficiencia al generar una tabla más pequeña, llamada índice, a partir de una columna específica o un conjunto de columnas. Estas columnas, denominadas clave, se pueden utilizar para imponer la unicidad. A continuación se muestra una visualización simple de un índice de ejemplo utilizando dos columnas como clave.

+------+----------+----------+
| ROW | COLUMN_1 | COLUMN_2 |
+------+----------+----------+
| 1 | data1 | data2 |
+------+----------+----------+
| 2 | data1 | data1 |
+------+----------+----------+
| 3 | data1 | data1 |
+------+----------+----------+
| 4 | data1 | data1 |
+------+----------+----------+
| 5 | data1 | data1 |
+------+----------+----------+

Las consultas utilizan índices para identificar y recuperar los datos específicos, incluso si son una combinación de claves. Sin un índice, ejecutar esa misma consulta da como resultado una inspección de cada fila en busca de los datos necesarios. La indexación produce un atajo, con tiempos de consulta mucho más rápidos en tablas expansivas. Una analogía con los libros de texto puede proporcionar otra forma común de visualizar cómo funcionan los índices.

¿Cuándo habilitar la indexación?

La indexación solo es ventajosa para tablas grandes con información a la que se accede regularmente. Por ejemplo, para continuar con nuestra analogía del libro de texto, tiene poco sentido indexar un libro de cuentos para niños con solo una docena de páginas. Es más eficiente simplemente leer el libro para encontrar cada aparición de la palabra "tortuga" que configurar y mantener índices, consultar esos índices y luego revisar cada página proporcionada. En el mundo de la computación, esas tareas adicionales relacionadas con la indexación representan recursos desperdiciados que tendrían un mejor propósito sin indexar.

Sin índices, cuando las tablas crecen en proporciones enormes, los tiempos de respuesta se ven afectados por las consultas dirigidas a esas tablas obtusas. Las consultas ineficientes se manifiestan en la latencia dentro del rendimiento de la aplicación o el sitio web. Comúnmente identificamos esta latencia mediante el uso de la función de registro de consultas lentas de MySQL. Puede encontrar más detalles sobre el uso de la función de registro de consultas lentas en el primer artículo de esta serie:Rendimiento de MySQL:identificación de consultas largas.
Una vez que una tabla colosal llega a su punto de inflexión, alcanza el potencial de tiempo de inactividad para aplicaciones y sitios web . La realización de evaluaciones de rutina para una base de datos en crecimiento establece un rendimiento óptimo de la base de datos y evita las interrupciones inherentes a las consultas largas.

Pros y contras de la indexación de MySQL

Existen ventajas y desventajas en el uso de la indexación de MySQL, y analizaremos las ventajas y desventajas importantes para su consideración. Estos aspectos lo guiarán para decidir si la indexación es una opción adecuada para su situación.

¿Qué información se indexa?

Seleccionar qué indexar es probablemente la parte más difícil de indexar sus bases de datos. Determinar qué es lo suficientemente importante para indexar y qué es lo suficientemente benigno para no indexar. En términos generales, la indexación funciona mejor en aquellas columnas que son el tema de las cláusulas WHERE en sus consultas ejecutadas comúnmente. Considere la siguiente tabla simplificada:

ID, TITLE, LAST_NAME, FIRST_NAME, MAIDEN_NAME, DOB, GENDER, AGE, DESCRIPTION, HISTORY, ETC...

Si sus consultas se basan en probar la cláusula WHERE usando LAST_NAME y FIRST_NAME, la indexación por estas dos columnas aumentaría significativamente los tiempos de respuesta de la consulta. Alternativamente, si sus consultas se basan en una simple búsqueda de ID, la indexación por ID sería la mejor opción.

Estos ejemplos son simplemente un ejemplo rudimentario, y hay varios tipos de estructuras de indexación integradas en MySQL. La siguiente página de MySQL analiza estos tipos de índices con mayor detalle y es una lectura recomendada para cualquiera que esté considerando la indexación:Cómo usa MySQL los índices

¿Qué es un índice único?

Otro punto a tener en cuenta al evaluar qué columnas servir como clave en su índice es si se debe usar la restricción ÚNICA. Establecer la restricción ÚNICA impondrá la unicidad en función de la clave de indexación configurada. Como con cualquier clave, puede ser una sola columna o una concatenación de varias columnas. La función de esta restricción asegura que no haya entradas duplicadas en la tabla según la clave configurada.

¿Qué es un índice de clave principal?

Tan comúnmente invocada como la restricción ÚNICA, la CLAVE PRINCIPAL se usa para optimizar los índices. Esta restricción garantiza que la CLAVE PRINCIPAL designada no pueda tener un valor nulo. Como resultado, se produce un aumento del rendimiento cuando se ejecuta en un motor de almacenamiento InnoDB para la tabla en cuestión. Este impulso se debe a cómo InnoDB almacena físicamente los datos, colocando filas con valores nulos en la clave fuera de secuencia contigua con filas que tienen valores. Habilitar esta restricción garantiza que las filas de la tabla se mantengan en orden contiguo para obtener respuestas más rápidas.

Gestión de índices

Ahora cubriremos algunos de los conceptos básicos de la manipulación de índices usando la sintaxis de MySQL. En los ejemplos, incluiremos la creación, eliminación y listado de índices. Tenga en cuenta que estos ejemplos tienen entradas de marcador de posición para las palabras clave específicas. Estas palabras clave se explican por sí mismas para facilitar la lectura, y a continuación se muestra un resumen de ellas.

Listar/Mostrar índices

Las tablas pueden tener múltiples índices. La gestión de índices inevitablemente requerirá poder enumerar los índices existentes en una tabla. La sintaxis para ver un índice se encuentra a continuación.

SHOW INDEX FROM tableName;

Creación de índices

La creación de índices tiene una sintaxis simple. La dificultad está en determinar qué columnas necesitan indexación y si es necesario imponer la singularidad. A continuación, ilustraremos cómo crear índices con y sin CLAVE PRINCIPAL y restricciones ÚNICAS.

Como se mencionó anteriormente, las tablas pueden tener múltiples índices. La indexación múltiple es útil para crear índices en sintonía con las consultas requeridas por su aplicación o sitio web. La configuración predeterminada permite hasta 16 índices por tabla, aumente este número, pero generalmente es más de lo necesario. Los índices se pueden crear durante la creación de una tabla o se pueden agregar a la tabla como índices adicionales más adelante. A continuación, repasaremos ambos métodos.

Ejemplo:crear una tabla con un índice estándar

CREATE TABLE tableName (
ID int,
LName varchar(255),
FName varchar(255),
DOB varchar(255),
LOC varchar(255),
INDEX ( ID )
);

Ejemplo:crear una tabla con índice único y clave principal

CREATE TABLE tableName (
ID int,
LName varchar(255),
FName varchar(255),
DOB varchar(255),
LOC varchar(255),
PRIMARY KEY (ID),
UNIQUE INDEX ( ID )
);

Ejemplo:agregar un índice a una tabla existente

CREATE INDEX indexName ON tableName (ID, LName, FName, LOC);

Ejemplo:agregar un índice a una tabla existente con clave principal

CREATE UNIQUE INDEX indexName ON tableName (ID, LName, FName, LOC);

Eliminación de índices

Al administrar los índices, es posible que deba eliminar algunos. Eliminar índices también es un proceso muy simple, vea el ejemplo a continuación:

DROP INDEX indexName ON tableName;

Hay muchas maneras de optimizar su base de datos para una verdadera eficiencia. Si desea obtener más información o convertir los tipos de motores de búsqueda disponibles en MySQL, lea nuestro tutorial MyISAM vs. InnoDB. O si necesita bases de datos de alto funcionamiento, consulte nuestra página de productos MySQL para ver diferentes opciones.

Navegación en serie<>