Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

MyISAM e InnoDB, ¿cual elegir?

Estas en el tema de MyISAM e InnoDB, ¿cual elegir? en el foro de Mysql en Foros del Web. Buenas, Seguramente no seré el primero que pregunta algo así, pero no es que no haya buscado ni mucho menos, de echo he leído varias ...
  #1 (permalink)  
Antiguo 31/03/2010, 10:44
 
Fecha de Ingreso: junio-2002
Mensajes: 57
Antigüedad: 22 años, 6 meses
Puntos: 0
MyISAM e InnoDB, ¿cual elegir?

Buenas,

Seguramente no seré el primero que pregunta algo así, pero no es que no haya buscado ni mucho menos, de echo he leído varias docenas de artículos, posts, etc y no me ha quedado claro cual podría ser mejor.

El caso es que quiero elegir la mejor base según unos criterios que son en los que se va a basar mi base de datos:
La tabla tiene ahora unos 2 millones de registros, el caso es que va a seguir creciendo poco a poco.

Las consultas más frecuentes son
select from tabla where campo2 = tal limit 50
select from tabla where campo3 IN(arrayids)

y alguna búsqueda en concreto pero no es la utilidad principal.

El caso es que no se si mantener MyISAM o InnoDB por que en selects se supone que corre más el myisam pero como no hago búsquedas directamente sobre la base de datos quizás no sea lo más interesante.

Luego tengo otra tabla en la que sí hago búsquedas y serán unos 100.000 registros y van aumentando poco a poco, es un varchar de no más de 50 carácteres, también me interesaría optimizar esta tabla.

Si alguien me puede sacar de las dudas se lo agradecería.

Un saludo
  #2 (permalink)  
Antiguo 02/04/2010, 19:21
 
Fecha de Ingreso: febrero-2010
Mensajes: 57
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: MyISAM e InnoDB, ¿cual elegir?

Hola,


Talvez te sirva leer esta info:

http://dev.mysql.com/doc/refman/5.5/en/myisam-storage-engine.html

http://dev.mysql.com/doc/refman/5.5/en/innodb.html


Saludos,
Marsh_Spider
  #3 (permalink)  
Antiguo 04/04/2010, 01:42
 
Fecha de Ingreso: enero-2010
Mensajes: 191
Antigüedad: 14 años, 11 meses
Puntos: 7
Respuesta: MyISAM e InnoDB, ¿cual elegir?

Cita:
Iniciado por VicHaunter Ver Mensaje
Buenas,

Seguramente no seré el primero que pregunta algo así, pero no es que no haya buscado ni mucho menos, de echo he leído varias docenas de artículos, posts, etc y no me ha quedado claro cual podría ser mejor.

El caso es que quiero elegir la mejor base según unos criterios que son en los que se va a basar mi base de datos:
La tabla tiene ahora unos 2 millones de registros, el caso es que va a seguir creciendo poco a poco.

Las consultas más frecuentes son
select from tabla where campo2 = tal limit 50
select from tabla where campo3 IN(arrayids)

y alguna búsqueda en concreto pero no es la utilidad principal.

El caso es que no se si mantener MyISAM o InnoDB por que en selects se supone que corre más el myisam pero como no hago búsquedas directamente sobre la base de datos quizás no sea lo más interesante.

Luego tengo otra tabla en la que sí hago búsquedas y serán unos 100.000 registros y van aumentando poco a poco, es un varchar de no más de 50 carácteres, también me interesaría optimizar esta tabla.

Si alguien me puede sacar de las dudas se lo agradecería.

Un saludo
MyIsam sería la respuesta, en teoría es más rápida y permite indices fulltext, InnoDB es transaccional es decir es mejor para insertar datos cuando hay tablas relacionadas pero en si es más lenta.

La diferencia fundamental es que en InnoDB podés producir bloqueos a nivel de fila, mientras que en MyIsam los bloqueos son a nivel de tabla.

En criollo:

Código:
CREATE TABLE `producto`(id INT NOT NULL AUTO_INCREMENT, valor INT);

CREATE TABLE `descripcion`(id INT, titulo VARCHAR(50));

LOCK TABLE `producto`,`descripcion` WRITE;

INSERT `producto` SET valor=1;

INSERT `descripcion` SET titulo='Un Titulo',id=LAST_INSERT_ID();

UNLOCK TABLES;
Como verás para relacionar la tabla producto con descripcion utilizo el id que se ha insertado en producto, para evitar errores he bloqueados la tabla de modo exclusivo por tanto nadie puede leer o escribir en ese momento.

En cambio en InnoDB no necesito bloquear toda la tabla, solo bloqueo la fila:

Código:
CREATE TABLE `producto`(id INT NOT NULL AUTO_INCREMENT, valor INT) ENGINE=InnoDB;

CREATE TABLE `descripcion`(id INT, titulo VARCHAR(50)) ENGINE=InnoDB;

SET autocommit=0;

BEGIN;

INSERT `producto` SET valor=1;

INSERT `descripcion` SET titulo='Un Titulo',id=LAST_INSERT_ID();

COMMIT;

SET autocommit=1;
Cualquiera puede estar leyendo o escribiendo en la tabla mientras realizas esta operación ya que el bloqueo esta dado en la fila y no en la tabla.

Por otra parte innoDB tiene ventajas con relaciones entre tablas, etc y MyIsam tienen indices Fulltext, etc y es más velóz.

No es una mejor que la otra simplemente son dos herramientas diferentes, tranquilamente una tabla puede ser MyIsam y otras innoDB pero ojo porque entre ambas no son compatible en cuanto a funcionalidades, por supuesto que podes leer y escribir en cualquiera.
  #4 (permalink)  
Antiguo 05/04/2010, 07:15
 
Fecha de Ingreso: junio-2002
Mensajes: 57
Antigüedad: 22 años, 6 meses
Puntos: 0
Respuesta: MyISAM e InnoDB, ¿cual elegir?

Gracias abcdefghi , lo que quizás no he comentado es que en esta base de datos se están insertando contínuamente datos (aunque no utilizo lastid ni bloqueo tablas por que no me es necesario).

De todas formas por lo que me comentas, a la hora de seleccionar datos por id de las tablas , aunque tenga 4 millones de registros, me dará mejor rendimiento myisam no?.

Gracias por la información. Hago las pruebas y ya comento algo.
  #5 (permalink)  
Antiguo 05/04/2010, 08:35
 
Fecha de Ingreso: abril-2010
Mensajes: 8
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: MyISAM e InnoDB, ¿cual elegir?

MyISAM no te tendrá en cuenta las claves ajenas, por lo que si estas insertando constantemente datos, yo aseguraría la consistencia e integridad de la BD utilizando InnoDB.
  #6 (permalink)  
Antiguo 05/04/2010, 14:54
 
Fecha de Ingreso: enero-2010
Mensajes: 191
Antigüedad: 14 años, 11 meses
Puntos: 7
Respuesta: MyISAM e InnoDB, ¿cual elegir?

Cita:
Iniciado por VicHaunter Ver Mensaje
Gracias abcdefghi , lo que quizás no he comentado es que en esta base de datos se están insertando contínuamente datos (aunque no utilizo lastid ni bloqueo tablas por que no me es necesario).

De todas formas por lo que me comentas, a la hora de seleccionar datos por id de las tablas , aunque tenga 4 millones de registros, me dará mejor rendimiento myisam no?.

Gracias por la información. Hago las pruebas y ya comento algo.
Si MySql no tiene que relacionar tablas al insetar, actualizar o eliminar MyIsam te vendría mejor, pero ojo, no hay comentario cierto sólo apróximado, debes si o si hacer una prueba de campo, 4m de filas no son una cosa simple.

Las transacciones y bloqueos suelen darse comunmente en los UPDATE's o DELETE's, recorre la lógica del programa si no necesitas mantener coherencia en este tipo de consulta púes con MyIsam estará bien, de todas maneras no tengas miedo a utilizar, tablas InnoDB en la sección de usuarios, tablas MyIsam en la sección de topics, tablas Falcon en la sección innovación, etc. Siempre es mejor utilizar un mismo ENGINE pero cuando los datos son muchos y los recursos pocos hay que privilegiar performance ante que comodidad.
  #7 (permalink)  
Antiguo 05/04/2010, 15:29
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 18 años, 4 meses
Puntos: 70
Respuesta: MyISAM e InnoDB, ¿cual elegir?

Perdón por la auto-promoción , pero espero te aclare un poco.

http://www.forosdelweb.com/f86/faqs-...1/#post2024134

Fuera de la velocidad también debes considerar integridad de información

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com

Etiquetas: elegir, innodb
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 22:58.