3.1.4.1 Tablas ISAM
Las tablas de tipo de Método de acceso secuencial indexado (ISAM) era el estándar
antiguo de Mysql. Estas fueron sustituidas por las tablas MyiSAM en la versión 3.23.
Por lo tanto, es probable que solo se tope con este tipo de tablas si está trabando con
bases de datos antiguas. La principal diferencia entre las dos, es el índice de las
tablas MyISAM es mucho más pequeño que el de las tablas ISAM, de manera que un
SELECT con un índice sobre una tabla MyISAM utilizará mucho menos recursos del
sistema.
3.1.4.2.1 Tablas estáticas
Las tablas estáticas tienen longitud fija. Cada registro tiene asignado exactamente 10
Bytes.
Este tipo de tablas se caracterizan por:
• Ser muy rápidas (ya que Mysql sabe que el segundo nombre comienza
siempre en el carácter número once)
• Resultan sencillas de almacenar en caché.
• Resultan sencillas para reconstruir tras un fallo.
• Requieren más espacio de disco
3.1.4.2.2 Tablas Dinámicas
Las columnas de las tablas dinámicas tienen diferentes tamaños. Auque este tipo de
dato ahorra espacio, resulta sin embargo más complejo.
Las tablas de tipo dinámico presentan las siguientes características:
• Todas las columnas de cadena son dinámicas.
• Por regla general, ocupan mucho menos espacio de disco que las tablas fijas.
• Las tablas requieren un mantenimiento regular para evitar su fragmentación.
• No resulta tan sencillo de reconstruir tras un fallo, especialmente si las tablas
están muy fragmentadas.
3.1.4.2.3 Tablas comprimidas
Las tablas comprimidas son tablas de solo lectura que utilizan mucho menos espacio
en disco.
Son ideales para su uso con datos comprimidos que no cambien (que solo se pueden
leer y no escribir) y donde no exista mucho espacio disponible.
Las tablas comprimidas presentan las siguientes características:
• Las tablas son mucho más pequeñas.
• Como cada registro se comprime de forma separada, la carga de acceso es
reducida.
• Cada columna se podría comprimir de forma diferente, utilizando distintos
algoritmos de compresión.
3.1.4.3 Tablas Merge
Las tablas Merge son la fusión de las tablas MyISAM iguales.
Por lo general se usa cuando las tablas MyISAM comienzan a resultar demasiado
grandes.
Entre las ventajas de estas tablas se pueden mencionar las siguientes:
• Resultan más rápidas en determinadas situaciones.
• El tamaño de la tabla es más pequeño
Desventajas de la tabla Merge:
• Resultan mucho más lentas en búsquedas.
• El comando REPLACE no funciona sobre ellas.
3.1.4.4 Tablas Heap
Las tablas Heap son el tipo de tabla más rápido porque se almacena en memoria y
utilizan un índice asignado. La contrapartida es que como se almacenan en memoria,
en el caso de una falla del sistema, los datos se pierden.
3.1.4.5 Tablas Innodb
Las tablas Innodb son tablas de transacción segura (lo que significa que dispone de
las funciones COMMIT y ROLLBACK). En una tabla MyISAM, la tabla entera se
bloquea al realizar funciones de inserción. Durante esa fracción de segundo, no se
puede ejecutar ninguna otra instrucción sobre la tabla. Innodb utiliza funciones de
bloqueo a nivel de fila de manera que solo se bloquee dicha fila y no toda la tabla, y
se puedan seguir aplicando instrucciones sobre otras filas.
3.1.5 Transacciones y bloqueos
Las consultas sobre la base de datos se ejecutan una después de otra. En el caso de un
sitio Web que sirva páginas, da lo mismo el orden en que la base de datos realice las
consultas, siempre y cuando lo haga rápidamente. Sin embargo, ciertos tipos de
consultas necesitan realizarse en un orden dado, como las que dependen de los
resultados de una consulta anterior, o grupos de actualizaciones que necesitan
realizarse en conjunto. Todos los tipos de tabla pueden utilizar la función de bloqueo,
pero sólo los tipos innodb y BDB disponen de funciones transaccionales integradas.
3.1.6 Las transacciones en las tablas Inodb
La potencia de las tablas innodb procede del uso de transacciones o instrucciones
SQL agrupadas en una. Un ejemplo típico son las transacciones bancarias.
Por ejemplo, si se transfiere una cantidad de dinero desde la cuenta de una persona a
otra, se realizan al menos dos consultas:
UPDATE Persona1 SET Valor = ValorDisponible – ValorADebitar;
UPDATE Persona2 SET Valor = ValorDisponible + ValorADebitar;
El proceso parece claro, pero que ocurriría si algo sale mal durante el proceso y el
sistema falla entre las dos consultas sin que llegue a completarse la segunda. Se
habrá retirado los fondos de la cuenta de la primera persona, se creerá que el pago se
ha realizado. Sin embargo, la segunda persona no estará muy contenta porque el pago
no se ha realizado. En este tipo de transacciones, resulta fundamental asegurarse de
que las dos consultas se levan a cabo o que no se hace ninguna de las dos. Para ello,
se empaquetan en los que se conoce como una transacción, con una instrucción
BEGIN para indicar el inicio de la transacción y una instrucción COMMIT para
indicar el final. Solo tras procesar la instrucción COMMIT, las consultas se habrán
convertido en permanentes. Si algo sale mal a media ejecución, podemos utilizar el
comando ROLLBACK para invertir la parte incompleta de la transacción.
3.1.7 Lecturas coherentes
De manera predeterminada, las tablas innodb realizan una lectura coherente. Esto
significa que al realizar una consulta de selección, Mysql devuelve los valores
presentes de la base de datos hasta la última transacción completada. Si en el
momento de realizar la consulta existe alguna transacción en progreso, los resultados
de las instrucciones UPDATE o INSERT no se reflejarán, con una excepción: la
transacción abierta puede modificarse (puede que haya observado que al realizar la
consulta BEGIN-INSERT-SELECT, se visualizó el resultado insertado). Para poder
verlo, necesita tener dos ventanas abiertas y estar conectado a la base de datos.
3.1.8 Lectura de Bloqueos para actualizaciones
Las lecturas coherentes no siempre resultan adecuadas. Por ejemplo, que ocurriría si
varios usuarios están intentando agregar un nuevo registro en una tabla innotest?
Cada nuevo registro inserta un número ascendente exclusivo, este campo no es clave
principal o un campo de incremento automático, por lo tanto nada impide que cree el
registro duplicado. Sin embargo, no queremos que eso ocurra. Lo que desearíamos es
leer el valor actual e insertar un nuevo valor, incrementando en una unidad. Pero esta
acción no garantiza un valor único.
La forma de evitar resultados erróneos es realizando un bloqueo de actualización
sobre la operación de selección. Si indicamos a Mysql, que estamos realizando una
lectura de actualización, no permitirá que nadie más lea el valor hasta que nuestra
transacción se haya completado.
3.1.9 Bloqueos de lectura en modo compartido
Existe otro tipo de bloqueo de lectura que no devuelve un valor si el valor que está
leyendo ha sido modificado por una transacción incompleta. Devuelve el último
valor, pero no forma parte de una transacción cuya intención es modificar el valor.
3.1.10 Transacciones en tablas BDB
Las tablas BDB procesan las transacciones de forma ligeramente diferente a las
tablas Innodb. Si una persona está realizando una transacción sobre una tabla x, si
esta transacción no está completa, ninguna persona podrá consultar los datos de esta tabla mientras la transacción no finalice.
El periodo de tiempo que puede significar al llevar a cabo esta consulta es
demasiado. El hecho de que no se trate de una consulta de selección “rápida” en las
tablas BDB significa que todas las transacciones que se pospongan pueden dar lugar
a graves problemas de rendimiento.
Como en el caso de las tablas innodb, el modo predeterminado de AUTOCOMMIT =
1. Esto significa que a menos que coloque sus cambios dentro de una transacción
(comenzando con BEGIN), se completarán inmediatamente.
3.1.11 Otros comportamientos transaccionales
Existe una serie de comandos adicionales que finalizan automáticamente una
transacción (en otras palabras, que se comportan como si hubiéramos realizado una
operación de confirmación):
• BEGIN
• ALTER TABLE
• CREATE INDEX
• RENAME TABLE
• TRUNCATE
• DROP TABLE
• DROP DATABASE
• LOCK TABLES
Hay que tener mucho cuidado cuando se realizan transacciones ya que al ejecutar
cualquiera de estos comandos cuando las transacción este a medias, automáticamente
se realizará un COMMIT.
(Manual de Diferencias entre Mysql y Oracle, Diego Javier Burbano, Ecuador)
Nov 2, 2007
Labels
Oracle
Unix
Sql Server
Noticias
Windows
12c
Varios
aix
cloud
linux
performance
sqlserver
Sap
awr
backup
base de datos
cpu
database
golden gate
goldengate
microsoft
ora-
rman
sql
tdp
tsm
always free
alwayson
availability
bug
expdp
extract
html
java
oracle 11g
patch
psu
tivoli
tuning
upgrade
virtualizacion
10046
12.1
12.2
1904046.1
19405
2040347.1
2149579.1
22912874
25684960
25972261
ADB
ANS
ANS1087E
DST
Mysql
OGG-00303
ORACLE_HOME
RC106
_OFFLINE_ROLLBACK_SEGMENTS
_datafile_write_errors_crash_instance
_disable_function_based_index
abended
adapter
apex
append
asm
atp
autonomous
bigdata
block recover
bundlepatch
cdb
change
cluster
corrupcion
counter log
crash
crecimiento
curl
data_options
datafile
dataguard
datapatch
datapump
db2
dba_hist_tbspc_space_usage
desarrollo
disable_append_hint
e-business suite
endpoint
error
event
exadata
extractor
full
gg
grid
hash
hash_value
hashing
hostname
ibm
ide
idle instance
impdp
in-memory
instance
jdbc
jtds
kafka
lodctr
logs
mac
memory
mirror
mongo
mongodb
network_link
ops$
ora-01017
oracle rest data services
ords
pal
parche
pdb
performance monitor
perl
point
ptr
qkaffsindex3
rac
recovering
redis
replica
replicador
replicate
replication
replicte
respaldo
rest enabled sQL service
restart
restore
rollback segment
scm
scripts
shell
smon
spu
sql_id
sql_trace
sqldeveloper
standalone
standby
tdpsqlc
tempfile
time
tkprof
trace
tracefile
transaction
trca
trcanlzr
undo_management
virtual machine
vm

History
-
▼
2007
(45)
-
▼
11
(20)
- Oracle: Problema:"java: xcb_xlib.c:52: xcb_xlib_un...
- .Net: Disponibles las versiones express de la nuev...
- Opensuse 10.3: Problema para compilar con vmware s...
- Windows: Permitiendo un número más grande de conex...
- Física: Paradoja de los dos gemelos
- Albert Einstein: Magnitud del tiempo
- Oracle: Job and procedure for to update statistics
- Oracle: Visualizando los jobs que se están ejecuta...
- .Net: LLenando un combobox en un formulario Windows
- Sql Server: desencriptando Procedimientos almacenados
- Pipebytes: Compartiendo archivos
- Windows: 10 nuevas caracteristicas de Windows Serv...
- Linux: Habilitar servicios automáticos
- Sql Server: Pasos en la recuperación (Teórico)
- Virtual Box: Shared Folders
- Windows: Obteniendo información de sistemas desde ...
- Linux: Montando volumen nfs
- Mysql: Tipos de Bases de Datos y bloqueos
- Sql Server: Estadisticas y la forma de administrar...
- Kdenlive, editor de vídeos libre para Linux
-
▼
11
(20)

Copyright (c) Felipe Rodrigo Donoso Bastias. Powered by Blogger.

Buenísima tu sección mysql . Soy programador php+mysql y no conocia las diferencias las diferencias de los tipos de tablas existentes. Felicitaciones. Me sirvió de mucho
ReplyDeleteMauricio
This comment has been removed by the author.
ReplyDeleteDisculpen, como hago para cambiar el tipo de tabla? tengo una base extensa y no quiero volver a crearla.
ReplyDelete