2009-12-28 13 views
19

Alguien me acaba de decir que InnoDB es mucho mejor que MyISAM. Entonces, cuando creo una tabla, ¿debo siempre intentar usar InnoDB Engine en lugar de MyISAM? ¿O ambos tienen sus grandes beneficios?¿Debería siempre preferir MySQL InnoDB sobre MyISAM?

+0

http://www.mikebernat.com/blog/MySQL_-_InnoDB_vs_MyISAM –

+1

No; ambos tienen sus beneficios. – philfreo

Respuesta

36

MyISAM es transaccional y organizado en montón. Los registros se identifican por el desplazamiento de fila en la tabla y los índices almacenan este desplazamiento como un puntero de fila.

InnoDB admite transacciones y está organizado por índice. Los registros se identifican por el valor PRIMARY KEY (o una columna interna oculta si no hay PRIMARY KEY definidos) y se almacenan en un B-Tree. Los índices secundarios almacenan el valor de PRIMARY KEY como un puntero de fila.

Las consultas que implican exploraciones de tablas completas o búsquedas secundarias de índices suelen ser más rápidas en las tablas MyISAM.

Las consultas que implican búsquedas de PRIMARY KEY suelen ser más rápidas en las tablas InnoDB.

MyISAM tablas almacenan el número de registros en la tabla en los metadatos de la tabla, es por eso que las consultas como esta:

SELECT COUNT(*) 
FROM myisamtable 

son instantáneos.

MyISAM las tablas están completamente bloqueadas en las operaciones DML (con varias excepciones).

InnoDB tablas bloquean los registros individuales y las brechas de índice, sin embargo, estos son los registros y las lagunas que se escanean, no solo las que coinciden con la condición WHERE. Esto puede llevar a que los registros se bloqueen a pesar de que no coinciden.

InnoDB tablas de integridad referencial (FOREIGN KEY s). MyISAM tablas no.

Existen varios escenarios que pueden mostrar los beneficios de ambos motores.

8

En pocas palabras:

usted debe utilizar InnoDB:

  • si necesita soporte de transacciones
  • si necesita claves foráneas

Debe utilizar MyISAM:

  • si no necesitan lo anterior y
  • necesita velocidad (operaciones de bases de datos más rápidas)
+6

Es posible que desee leer este http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/ sobre la velocidad. –

5

mi humilde opinión, siempre se debe preferir InnoDB sobre MyISAM debido al apoyo transaccional que se encuentra en el corazón de cada sistema de base de datos relacional.

1

InnoDB es un motor de base de datos totalmente compatible con ACID y por lo tanto ofrece soporte para transacciones, etc. Como consecuencia, puede ser más lento que la base de datos MyISAM que tiende a optimizarse en una dirección diferente.

Por lo tanto, si necesita transacciones InnoDB (u otro RDBMS como PostgreSQL) es la opción obvia.

Hay una comparación razonable sobre el Wikipedia

0

Se puede usar tanto. Puede usar InnoDB para su escritura de base de datos/transacciones, pero leer de una base de datos MyISAM, que está desnormalizada. Esto da lo mejor de ambos mundos. Sabes que los datos están seguros con la integridad referencial de InnoDB, y puedes leerlos tan rápido como quieras con MyISAM.

+0

Puede consultar un enlace sobre cómo usar ambos motores – Amareswar

11

Respuesta simple: No, no deberías.

algunos puntos sobre cada motor:

InnoDB

  • Soporte completo para las restricciones de clave externa y transacciones. (compatible con ACID)
  • Nivel de fila de bloqueo.
  • Declaraciones de INSERT discutiblemente más rápidas. (y posiblemente ACTUALIZAR así)

MyISAM

  • declaraciones más rápido de selección.
  • soporte para texto completo busca
  • columnas BLOB y TEXT pueden ser indexados
  • 4x límite de almacenamiento máximo, en comparación con InnoDB (256 TB vs 64TB)

Ver más en el Manual:

Cuestiones relacionadas