Cada tabla BDB se almacena en disco en dos
        ficheros. 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 .db
        contiene los datos de tabla e índices.
      
        Para especificar explícitamente que quiere una tabla
        BDB, indíquelo con una opición de tabla
        ENGINE o TYPE:
      
CREATE TABLE t (i INT) ENGINE = BDB; CREATE TABLE t (i INT) TYPE = BDB;
        BerkeleyDB es sinónimo de
        BDB en la opción ENGINE o
        TYPE .
      
        El motor de almacenamiento BDB proporciona
        tablas transaccionales. La forma de usar estas tablas depende
        del modo autocommit:
      
            Si está ejecutando con autocommit activado (por defecto),
            los cambios en las tablas BDB se
            efectúan inmediatamente y no pueden deshacerse.
          
            Si está ejecutando con autocommit desactivado, los cambios
            no son permanentes hasta que ejecuta un comando
            COMMIT . En lugar de hacer un commit
            puede ejecutar ROLLBACK para olvidar los
            cambios.
          
            Puede comenzar una transacción con el comando
            BEGIN WORK para suspender autocommit, o
            con SET AUTOCOMMIT=0 para desactivar
            autocommit explícitamente.
          
        Consulte Sección 13.4.1, “Sintaxis de START TRANSACTION,
        COMMIT y ROLLBACK”.
      
        El motor de almacenamiento BDB tiene las
        siguientes características:
      
            En MySQL 5.0, las tablas BDB pueden tener
            hasta 31 índices por tabla, 16 columnas por índice, y un
            máximo de tamaño de clave de 1024 bytes.
          
            MySQL necesita una PRIMARY KEY en cada
            tabla BDB para que cada registro pueda
            identificarse unívocamente. Si no crea una explícitamente,
            MySQL crea y mantiene una PRIMARY KEY
            oculta. La clave oculta tiene una longitud de 5 bytes y se
            incrementa para cada intento de inserción. Esta clave no
            aparece en la salida de SHOW CREATE TABLE
            o DESCRIBE.
          
            La PRIMARY KEY es más rápida que
            cualquier otro índice, ya que la PRIMARY
            KEY se almacena junto con los datos. Los otros
            índices se almacenan como los datos claves + la
            PRIMARY KEY, por lo que es importante
            mantener la PRIMARY KEY tan pequeña como
            sea posible para ahorrar espacio en disco y tener más
            velocidad.
          
            Este comportamiento es similar al de
            InnoDB, donde las claves primarias
            pequeñas ahorran espacio no sólo en el índice primario
            sino también en índices secundarios.
          
            Si todas las columnas a las que accede en una tabla
            BDB son parte del mismo índice o parte
            de la clave primaria, MySQL puede ejcutar la consulta sin
            tener que acceder al registro. En una tabla
            MyISAM , esto sólo puede hacerse si las
            columnas son parte del mismo índice.
          
            El escaneo secuencial es más lento que para tablas
            MyISAM ya que los datos en tablas
            BDB se almacena en B-trees y no en un
            fichero de datos separado.
          
            Los valores clave no tienen compresión de prefijo ni sufijo
            como los valores clave en tablas MyISAM .
            En otras palabras, la información clave ocupa más espacio
            en tablas BDB en comparación con
            MyISAM .
          
            A menudo hay huecos en la tabla BDB que
            le permiten insertar nuevos registros en medio del árbol
            índice. Esto hace que las tablas BDB
            sean algo más grandes que las MyISAM.
          
            SELECT COUNT(*) FROM
             es lento para
            tablas tbl_nameBDB , ya que no se mantiene conteo
            de registros en la tabla.
          
            El optimizador necesita saber el número aproximado de
            registros en la tabla. MySQL resuelve esto contando
            inerciones y manteniendo esto en un segmento separado en
            cada tabla BDB . Si no realiza muchos
            comandos DELETE o
            ROLLBACK , este número debe ser lo
            bastante adecuado para el optimizador MySQL . Sin embargo,
            MySQL almacena el número sólo al cerrar, así que puede
            ser incorrecto si el servidor termina inesperadamente. Puede
            que no sea fatal incluso si este número no es 100%
            correcto. Puede actualizar el contador de registros usando
            ANALYZE TABLE o OPTIMIZE
            TABLE. Consulte Sección 13.5.2.1, “Sintaxis de ANALYZE TABLE” y
            Sección 13.5.2.5, “Sintaxis de OPTIMIZE TABLE”.
          
            Bloqueo interno en tablas BDB se realiza
            a nivel de páginas.
          
            LOCK TABLES funciona en tablas
            BDB como con otras tablas. Si no usa
            LOCK TABLES, MySQL realiza un bloqueo
            interno de múltiple escritura en la tabla (un bloqueo que
            no bloquea otros escritores) para asegurar que la tabla
            está bloqueada apropiadamente si otro flujo realiza un
            bloqueo de tabla.
          
            Para poder deshacer transacciones, el motor de
            almacenamiento BDB mantiene ficheros de
            log. Para máximo rendimiento puede usar la opción
            --bdb-logdir para guardar los logs
            BDB en un disco distinto al que tiene las
            bases de datos.
          
            MySQL realiza un checkpoint cada vez que se comienza un
            nuevo fichero log BDB , y borra cualquier
            fichero de log BDB no necesario para
            transacciones actuales. Puede usar FLUSH
            LOGS en cualquier momento para hacer un checkpoint
            de tablas Berkeley DB.
          
Para recuperación de desastres, debe usar copias de seguridad de tablas más el log binario de MySQL. Consulte Sección 5.8.1, “Copias de seguridad de bases de datos”.
            Atención: Si borra
            ficheros de log antiguos que estén en uso,
            BDB no es capaz de recuperar todo y puede
            perder datos si algo no va bien.
          
            Las aplicaciones deben estar siempre preparadas para tratar
            casos donde cualquier cambio en una tabla
            BDB pueda causar un rollback automático
            y cualquier lectura puede fallar con un error de deadlock.
          
            Si obtiene un disco entero con una tabla
            BDB , obtiene un error (probablemente
            error 28) y la transacción debe deshacerse. Esto contrasta
            con tablas MyISAM en las que
            mysqld espera a tener más espacio libre
            para continuar.
          
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

