MySQL: show table status mejorado

Desde la línea de comando ciertamente tenemos el control absoluto (siempre y cuando tengamos los privilegios) pero no siempre tenemos una visión general. En este caso cuando estamos logueados a una base de datos MySQL lo primero que solemos intentar averiguar es la lista de tablas y talvez la lista de funciones y procedimientos almacenados de una base de datos.

Este proceso suele ser doloroso por que en cuanto ejecutamos show table status; nos devuelve unas lineas que hasta da pereza interpretar. Lo que devuelve ese comando contiene varias columnas que vistas desde una herramienta visual como MySQL Workbench tienen mucho sentido, sin embargo desde la linea de comando no tanto. Pueden ver en la siguiente imagen como se ve un resultado en una ventana estándar de 80×25:

Para ver el detalle completo podemos agrandar la ventana y disminuir la fuente, pero suele tomar un poco de tiempo hacer eso, realmente es fastidioso.

Es por eso que hace mucho desarrollé un script para mostrar solo lo que necesito incluyendo a los procedimientos almacenados y funciones, recién esta semana que tengo  varias horas de ocio y puedo compartirla con ustedes.

El resultado de mi script es mucho mas comprensible:

Éste es código fuente del procedimiento almacenado:

DELIMITER $$

CREATE PROCEDURE `tools`.`sp_status`(dbname varchar(50))
BEGIN 

-- Obteniendo informacion de las tablas
SELECT
 TABLE_NAME as `Table Name`, 
 ENGINE as `Engine`,
 TABLE_ROWS as `Rows`,
 CONCAT(
    (FORMAT((DATA_LENGTH + INDEX_LENGTH) / POWER(1024,2),2))
    , ' Mb')
   as `Size`,
 TABLE_COLLATION as `Collation`
FROM information_schema.TABLES
WHERE TABLES.TABLE_SCHEMA = dbname; 

-- Obteniendo las funciones y procedimientos
SELECT ROUTINE_NAME as `Routine Name`, 
 ROUTINE_TYPE as `Type`,
 DATABASE_COLLATION as `Collation`
FROM information_schema.ROUTINES
WHERE ROUTINE_SCHEMA = dbname
ORDER BY ROUTINES.ROUTINE_TYPE, ROUTINES.ROUTINE_NAME;
END$$

Para invocarlo pueden escribir:

mysql> call tools.sp_status(database());

Notarán que he creado el procedimiento dentro de la base de datos tools, esto para que puedan llamarlo desde cualquier parte. Lamentablemente dentro de los procedimientos almacenados no es posible determinar la base de datos actual, es por eso que necesita de un parámetro con el nombre de la base de datos.

He publicado el procedimento en MySQL custom show table status

Espero que les sea de mucha utilidad (como a mi).

`

3 pensamientos en “MySQL: show table status mejorado

    • Jordi,
      show table status\G no es tan práctico cuando tienes decenas de tablas, ademas el procedure se define una sola vez, me parece mas incomodo estar revisando el resultado de tabulado de 80 tablas con \G.

Responder a ivancp Cancelar la respuesta

Tu dirección de correo electrónico no será publicada.