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

Trabajar con MyISAM en MySQL

MyISAM es uno de los motores de almacenamiento más populares en MySQL. MyISAM suele ser la segunda opción después de InnoDB; en esta publicación de blog, intentaremos averiguar cuál es la mejor manera de trabajar con este motor.

¿Qué es MyISAM?

MyISAM es uno de los motores de almacenamiento de MySQL. MyISAM se basa en ISAM (Método de acceso secuencial indexado), un algoritmo de indexación desarrollado por IBM que permite recuperar información de grandes conjuntos de datos de forma rápida. Sin embargo, no funciona muy bien cuando lee y escribe simultáneamente en una tabla, debido a su bloqueo de tabla. Tampoco admite transacciones.

Para algunos ingenieros de MySQL, este motor es la opción más popular después de InnoDB:el motor de almacenamiento MyISAM fue el único motor de almacenamiento proporcionado por MySQL en 2005 y estuvo disponible durante más de 20 años. MyISAM fue el motor de almacenamiento predeterminado para MySQL hasta la versión 5.5.

MyISAM desde dentro

Una ilustración de cómo funciona MyISAM desde adentro no está dentro del alcance de este blog, pero podemos brindarle la configuración que lo ayudará a optimizar el rendimiento del motor:

  • Myisam_sort_buffer_size define el búfer que se asigna cuando se ordena el índice mediante la ejecución de consultas REPAIR, CREATE INDEX o ALTER TABLE.
  • Key_buffer_size define el tamaño del búfer utilizado para los bloques de índice en las tablas MyISAM. Aumentar este parámetro puede conducir a un mejor manejo del índice.
  • Sort_buffer_size describe el tamaño de un búfer que se asigna para subprocesos que necesitan realizar operaciones de ordenación.
  • Read_buffer_size describe el tamaño de un búfer que se asigna a subprocesos que realizan operaciones de exploración secuencial.
  • Write_buffer_size describe el tamaño del búfer de escritura.

Estos cuatro parámetros son importantes, pero si bien son importantes, también debe vigilar la variable key_buffer_size. La variable key_buffer_size determina el tamaño de los búferes de índice que se encuentran en la memoria; considérelo como la contraparte de innodb_buffer_pool_size, pero para MyISAM. Si sus servidores consisten principalmente en tablas MyISAM, puede asignar alrededor del 25 % o más de la RAM disponible en el servidor a la variable key_buffer_size. También hay otra manera de determinar cuál debería ser el valor del parámetro key_buffer_size:simplemente compare el valor key_read_requests (valor total de las solicitudes para leer un índice) y el valor key_reads (el valor de key_reads es el número de solicitudes que tuvieron que ser leer del disco). Los valores de esos parámetros se pueden recuperar mirando las variables de estado del servidor (simplemente emita una consulta MOSTRAR ESTADO GLOBAL en su servidor MySQL). También es beneficioso tener en cuenta que si key_reads devuelve un valor grande, el valor de key_buffer_size probablemente sea demasiado pequeño.

MyISAM y MySQL 8.0

Si le pregunta a algunos ingenieros de MySQL, le dirán que MyISAM ya no debería usarse. ¿Por qué? Bueno, algunas personas dicen que debido al hecho de que cuando MySQL avanzó, agregaron la mayoría de las funciones que anteriormente solo se podían ver en MyISAM en InnoDB, lo que hizo que MyISAM quedara obsoleto:

  • Los índices de texto completo están disponibles en InnoDB desde la versión 5.6.
  • Los tablespaces portátiles estuvieron disponibles en InnoDB desde la versión 5.6.
  • Los índices espaciales estuvieron disponibles en InnoDB desde la versión 5.7.
  • La última actualización de la tabla estuvo disponible en InnoDB desde la versión 5.7.

Entonces, ¿debería seguir usando MyISAM? Probablemente no. Sin embargo, hay una advertencia:tenga en cuenta que las consultas COUNT(*) simples probablemente funcionarán más rápido en MyISAM que en InnoDB:MyISAM almacena el número en los metadatos de la tabla, InnoDB no.

Estoy usando MyISAM y quiero cambiar a InnoDB, ¿qué debo hacer?

Si todavía usa MyISAM y desea cambiar a InnoDB, simplemente convierta todas sus tablas a InnoDB. Obviamente, es más fácil decirlo que hacerlo, pero aquí hay una guía simple:

  1. Averigüe qué tablas en su instancia de MySQL están usando MyISAM:
    SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ‘database_name’ AND ENGINE = ‘MyISAM’;
  2. Convierta todas sus tablas MyISAM a InnoDB:
    ALTER TABLE `table_name` ENGINE = InnoDB;

Si no desea ejecutar varias sentencias ALTER TABLE una tras otra, considere poner las sentencias ALTER TABLE en un bucle. Eso es todo, ¡has terminado!

Resumen

MyISAM es uno de los motores MySQL más populares. El motor era el predeterminado para las versiones de MySQL hasta la 5.5. El motor es una de las opciones más populares después de InnoDB, pero puede considerarse obsoleto a partir de MySQL 8.0. MySQL ya se ha asegurado de que todo lo que se puede hacer con MyISAM también se puede hacer cuando InnoDB está en uso, así que en este punto MyISAM solo es útil si desea que las consultas COUNT (*) simples sean más rápidas. Estas consultas serán más rápidas porque MyISAM almacena el número en los metadatos de la tabla; otros motores de MySQL no lo hacen.