Merge

Merge
Información sobre la plantilla
60*60
Motor de almacenamiento de MySQL
LicenciaGNU
Sitio web
Merge

Merge: El motor de almacenamiento es conocido también como MRG_MyISAM . Es una colección de tablas MyISAM idénticas que significa que todas las tablas tienen información de columna e índice idéntica. No se puede mezclar tablas en que las columnas se listen en orden distinto, no tengan exactamente las mismas columnas, o tengan los índices en orden distinto. Sin embargo, alguna o todas las tablas se pueden comprimir con myisampack.

Tablas

  • Cuando se crea una tabla MERGE , MySQL crea dos ficheros en disco. Los ficheros tienen nombres que comienzan con el nombre de la tabla y tienen una extensión para indicar el tipo de fichero, Un fichero .frm almacena la definición de tabla, y un fichero .MRG contiene los nombres de las tablas que deben usarse como una. Las tablas no tienen que estar en la misma base de datos que la tabla MERGE misma.
  • Se puede usar SELECT, DELETE, UPDATE, y INSERT en la colección de tablas.
  • Si se realiza un DROP de la tabla MERGE, sólo se borra la especificación de la misma. Las tablas subyacentes no se ven afectadas.
  • Cuando se crea una tabla MERGE , debe especificarse una cláusula UNION=(list-of-tables) que indique qué tablas se quieren usar como una. Se puede especificar opcionalmente una opción INSERT_METHOD si quiere que las inserciones en la tabla MERGE se realicen en la primera o última tabla de la lista UNION . Se utiliza un valor de FIRST o LAST para hacer que las inserciones se hagan en la primera o última tabla, respectivamente. Si no se especifica una opción INSERT_METHOD o si se especifica con un valor de NO, los intentos de insertar registros en la tabla MERGE producen un error.

MyISAM

Para reemplear una tabla MERGE en una colección diferente de tablas MyISAM, se pueden realizar una de las siguientes opciones:

  • DROP la tabla MERGE y recrearla.
  • Usar ALTER TABLE tbl_name UNION=(...) para cambiar la lista de tablas subyacentes.
  • Cambir el fichero .MRG y realizar un comando FLUSH TABLE para la tabla MERGE y todas las tablas subyacentes para forzar al motor de almacenamiento a leer el nuevo fichero de definición.

Ventajas

Las tablas MERGE pueden ayudar a arreglar los siguientes problemas:

  • Administración de un largo conjunto de tablas.
  • Mayor velocidad.
  • Realización de búsquedas más eficientes.
  • Realización de reparaciones más eficientes.
  • Búsqueda instantánea de varias tablas como una.

Desventajas

  • Sólo se puede usar tablas MyISAM idénticas para una tabla MERGE .
  • No se puede usar un número de características MyISAM en tablas MERGE . Por ejemplo, no se pueden crear índices FULLTEXT en tablas MERGE .
  • Si la tabla MERGE no es temporal, todas las tablas subyacentes MyISAM deben ser permanentes. Si la tabla MERGE es temporal, las tablas MyISAM pueden ser cualquier mezcla de tablas temporales y no temporales.
  • Las lecturas de claves son más lentas. Cuando lee una clave, el motor de almacenamiento MERGE necesita leer en todas las tablas subyacentes para chequear cuál se parece más a la clave dada. Si luego lee el siguiente, el motor MERGE necesita buscar en los buffers de lectura para buscar la siguiente clave. Sólo cuando se usa un búffer de claves el motor necesita leer el siguiente bloque de claves. Esto hace que las claves MERGE sean mucho más lentas en búsquedas eq_ref , pero no mucho más lentas en búsquedas ref.

Problemas con tablas MERGE

Problemas conocidos con tablas MERGE:

  • Si se usa ALTER TABLE para cambiar una tabla MERGE a otro tipo de tabla, el mapeo de las tablas subyacentes se pierde. En su lugar, los registros de las tablas subyacentes MyISAM se copian en la tabla alterada, que luego se asigna al nuevo tipo.
  • REPLACE no funciona.
  • No se puede usar DROP TABLE, ALTER TABLE, DELETE FROM sin una cláusula WHERE , REPAIR TABLE, TRUNCATE TABLE, OPTIMIZE TABLE, o ANALYZE TABLE en alguna de las tablas que se mapean en una tabla MERGE abierta. Si se hace, la tabla MERGE puede referirse a la tabla original, lo que conduce a resultados inesperados. La forma más fácil de solucionar este problema es realizar un comando FLUSH TABLES antes de realizar ninguna de estas operaciones para asegurar que no quedan abiertas tablas MERGE .
  • Una tabla MERGE no puede mantener restricciones UNIQUE sobre la tabla entera. Cuando se realiza un INSERT, los datos van a la primera o última tabla MyISAM (dependiendo del valor de la opción INSERT_METHOD ). MySQL se asegura que los valores de clave única sean únicos dentro de la tabla MyISAM , pero no entre todas las tablas en la colección.
  • Cuando se crea una tabla MERGE, no se chequea que las tablas subyacentes existan y tengan una estructura idéntica. Cuando se usa la tabla MERGE, MySQL chequea que la longitud del registro para todas las tablas mapeadas sea la misma. Si se crea una tabla MERGE de tablas MyISAM disimilares, es muy posible que se obtengan problemas.
  • El orden de índices en la tabla MERGE y sus tablas subyacentes debe ser el mismo. Si se usa ALTER TABLE para añadir un índice UNIQUE a una tabla usada en una tabla MERGE, y después se usa ALTER TABLE para añadir un índice no único en la tabla MERGE , la ordenación de índice es distinta para las tablas si ya hay un índice no único en las tabla subyacentees. (Esto es porque ALTER TABLE pone los índices UNIQUE antes de los índices no únicos para facilitar detección rápida de claves duplicadas.) Consecuentemente, las consultas en tablas con tales índices pueden retornar resultados no esperados.
  • DROP TABLE en una tabla en uso por una tabla MERGE, no funciona en Windows ya que el mapeo del motor de almacenamiento MERGE está escondido por la capa superior de MySQL. Desde Windows no se permite el borrado de ficheros abiertos, se debe volcar todas las tablas MERGE (con FLUSH TABLES) o borrar la tabla MERGE antes de borrar la tabla.

Fuente