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

Cómo usar índices para mejorar el rendimiento de las consultas de MySQL

Este artículo analiza los índices y cómo puede usarlos para mejorar el rendimiento de las consultas de la base de datos MySQL.

Rendimiento e índices de la base de datos

Los índices de bases de datos en MySQL le permiten acelerar el rendimiento de SELECT declaraciones de consulta. Para tablas pequeñas, un índice no ayuda mucho. Sin embargo, si tiene tablas con una gran cantidad de datos, los índices pueden mejorar drásticamente el rendimiento.

Los siguientes comportamientos son indicaciones de que las tablas pueden beneficiarse al agregar índices:

  • Su sitio carga muy lentamente o no se carga en absoluto.
  • Una aplicación no puede conectarse a su base de datos.
  • Las consultas de la base de datos están respaldadas.

Si experimenta alguno de estos problemas, debe analizar las consultas de su base de datos y considerar agregar índices.

Si tiene un VPS administrado o un servidor dedicado administrado, un mayor tamaño de búfer de clasificación también puede ayudar además de agregar índices. Abra un ticket en el Portal del cliente en https://my.a2hosting.com para discutir esta opción con nuestro Guru Crew.

Análisis de consultas de bases de datos

Para determinar qué tablas pueden beneficiarse del uso de índices, debe analizar las consultas de su base de datos. El EXPLICAR SELECCIÓN declaración le ayuda a hacer esto. Para analizar las consultas de la base de datos, siga estos pasos:

  1. Inicie sesión en su cuenta usando SSH.
  2. En el símbolo del sistema, escriba el siguiente comando, reemplazando nombre de usuario con el nombre de usuario de su cuenta de A2 Hosting y base de datos con el nombre de la base de datos:
    mysql -u username -p database
  3. En el mensaje Ingresar contraseña, escriba su contraseña. Aparece el indicador mysql>.
  4. Escriba el siguiente comando SQL:

    EXPLAIN SELECT * FROM table_name WHERE conditions \G
    
    Si escribe su propio código de aplicación, entonces ya conoce el SELECCIONAR instrucciones que utiliza para recuperar datos. Si está utilizando una aplicación de terceros, como WordPress o PrestaShop, es posible que deba examinar el código fuente o los registros de la base de datos para determinar el SELECCIONAR exacto. declaraciones que se utilizan para recuperar datos.
  5. Salida de EXPLAIN SELECT muestra cómo el optimizador de consultas de MySQL ejecutará la consulta. Por ejemplo, considere el siguiente resultado:

    mysql> EXPLAIN SELECT title FROM employees WHERE lastname LIKE 'T%' \G
    *************************** 1. row ***************************
               id: 1
      select_type: SIMPLE
            table: employees
             type: ALL
    possible_keys: NULL
              key: NULL
          key_len: NULL
              ref: NULL
             rows: 142
            Extra: Using where
    1 row in set (0.00 sec)
    

    En este ejemplo de salida:

    • Las claves_posibles y clave ambos valores son NULL , lo que indica que MySQL no tiene un índice que pueda usar para esta consulta.
    • Las filas El valor indica que MySQL leerá 142 filas para esta consulta. Si hay 142 filas en total en la tabla, esto significa que MySQL debe examinar cada fila para generar el conjunto de resultados. Esto podría llevar bastante tiempo para una mesa grande.

    Por otro lado, si tuviéramos que crear un índice llamado index_name para el apellido columna, MySQL podría generar el siguiente resultado para la misma consulta:

    mysql> EXPLAIN SELECT title FROM employees WHERE lastname LIKE 'T%' \G
    *************************** 1. row ***************************
               id: 1
      select_type: SIMPLE
            table: employees
             type: range
    possible_keys: index_name
              key: index_name
          key_len: 22
              ref: NULL
             rows: 17
            Extra: Using where; Using index
    1 row in set (0.00 sec)
    

    Como puede ver, las possible_keys y clave los valores indican que MySQL ha encontrado un índice que puede usar para optimizar la consulta. Además, MySQL leerá solo 17 filas para generar el conjunto de resultados, en lugar de las 142 filas. (Esto significa que la tabla tiene 17 filas donde el apellido comienza con "T".) Por último, el Extra El valor también indica que MySQL usará un índice para la consulta.

Agregar, eliminar y ver índices en una tabla

Después de analizar las consultas de la base de datos y determinar dónde se encuentran los cuellos de botella de rendimiento, está listo para agregar índices. Para hacer esto, siga estos pasos:

  1. Inicie sesión en su cuenta usando SSH.
  2. En el símbolo del sistema, escriba el siguiente comando, reemplazando nombre de usuario con el nombre de usuario de su cuenta de A2 Hosting y base de datos con el nombre de la base de datos:
    mysql -u username -p database
  3. En el mensaje Ingresar contraseña, escriba su contraseña. Aparece el indicador mysql>.
  4. Para agregar un índice a una tabla, escriba el siguiente comando SQL. Reemplazar table_name con el nombre de la tabla, index_name con el nombre del nuevo índice (que puede ser cualquier cosa que desee) y table_column con el nombre de la columna de la tabla para la que desea agregar el índice:

    ALTER TABLE table_name ADD INDEX index_name (table_column);
    
    Aunque los índices pueden mejorar el rendimiento, también pueden afectar negativamente al rendimiento si hay demasiados. Esto se debe a que cuantos más índices tiene una tabla, más trabajo debe hacer MySQL para mantenerlos actualizados. El truco consiste en encontrar el equilibrio adecuado entre suficientes índices para mejorar el rendimiento, pero no tantos como para que afecten negativamente al rendimiento.
  5. Para eliminar un índice de una tabla, escriba el siguiente comando SQL. Reemplazar table_name con el nombre de la tabla y reemplace index_name con el nombre del índice que desea eliminar:

    ALTER TABLE table_name DROP INDEX index_name;
    
  6. Para ver todos los índices de una tabla, escriba el siguiente comando SQL. Reemplazar table_name con el nombre de la tabla:

    SHOW INDEX FROM table_name \G
    
    Después de crear un índice, debe utilizar EXPLAIN SELECT de nuevo para ver cómo se ven afectadas las consultas. Además, debe continuar supervisando el rendimiento de la base de datos para ver si hay mejoras. Es posible que deba ejecutar una serie de pruebas para encontrar la cantidad óptima de índices para su base de datos.

Más Información

  • Para obtener más información sobre la optimización y los índices de MySQL, visite https://dev.mysql.com/doc/refman/5.5/en/optimization-indexes.html.
  • Para obtener más información sobre EXPLICAR declaración, visite https://dev.mysql.com/doc/refman/5.5/en/explain.html.