Tenga en cuenta que OPTIMIZE TABLE no realiza la desfragmentación. Internamente, OPTIMIZE TABLE realiza varias operaciones (copiar datos a un archivo temporal, volver a crear índices, recalcular estadísticas de índice). De hecho, el ejemplo que tengo se puede realizar manualmente como se muestra.
Ejemplo: si optimiza mydb.mytable
, ingrese este comando:
OPTIMIZE TABLE mydb.mytable;
Tenga en cuenta que mysql realiza algo de lo siguiente bajo el capó:
CREATE TABLE mydb.mytable2 LIKE mydb.mytable;
ALTER TABLE mydb.mytable2 DISABLE KEYS;
INSERT INTO mydb.mytable2 SELECT * FROM mydb.mytable;
ALTER TABLE mydb.mytable2 ENABLE KEYS;
DROP TABLE mydb.mytable;
ALTER TABLE mydb.mytable2 RENAME mydb.mytable;
ANALYZE TABLE mydb.mytable;
Esto es bastante útil para tablas que experimentan un alto volumen de ACTUALIZACIONES y DELETES
Realizar esto puede lograr dos cosas
Evite que mysql mire a través de fragmentos en una tabla en un intento de cargar datos en los fragmentos del tamaño correcto. Eliminar estos fragmentos reducirá esta operación.
Tener las estadísticas de índice recalculadas ayuda al MySQL Query Optimizer a construir mejores planes EXPLAIN. De lo contrario, las consultas pueden deteriorarse en el tiempo de ejecución porque MySQL Query Optimizer decidió hacer malas suposiciones sobre el plan EXPLAIN. Este sería un síntoma definitivo de una tabla que ha tenido un alto volumen de ACTUALIZACIONES y DELETES.
CONSIDERACIÓN
Con respecto al almacenamiento en caché, el almacenamiento en caché se sumerge rápidamente debido a un escaneo completo de la tabla. Para las páginas de índice MyISAM, ingrese y salga de MyISAM Key Cache. Para InnoDB, las páginas de datos e índices entran y salen del InnoDB Buffer Pool.