Este artículo muestra 4 formas diferentes para conocer con exactitud qué motor de almacenamiento (MyISAM, InnoDB, Blackhole, etc.) utiliza una tabla de una base de datos MySQL.
En anteriores artículos hable sobre los motores de almacenamiento (storage engine) más comunes y utilizados en bases de datos MySQL: MyISAM e InnoDB. Los motores de almacenamiento son los encargados de manejar las operaciones SQL sobre las tablas, y la forma y medio (memoria, disco, etc.) en que se almacenan. Es importante saber que cada tabla puede utilizar un motor de almacenamiento diferente, a pesar de pertenecer a una misma base de datos.
Existen diferentes alternativas para saber qué motor de almacenamiento utiliza una tabla en MySQL. En este artículo se presentan cuatro formas diferentes.
#1 SHOW CREATE TABLE
A través de la sentencia SQL SHOW CREATE
es posible volcar la sentencia SQL de creación de la tabla:
mysql> show create table mediawiki.searchindex\G *************************** 1. row *************************** Table: searchindex Create Table: CREATE TABLE `searchindex` ( `si_page` int(10) unsigned NOT NULL, `si_title` varchar(255) NOT NULL DEFAULT '', `si_text` mediumtext NOT NULL, UNIQUE KEY `si_page` (`si_page`), FULLTEXT KEY `si_title` (`si_title`), FULLTEXT KEY `si_text` (`si_text`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 1 row in set (0.00 sec)
En la misma se especifica el motor de almacenamiento utilizado (en este caso ENGINE=MyISAM
).
#2 information_schema.tables
La tabla "tables" de la base de datos "information_schema" posee información relacionada a todas las tablas de todas las bases de datos gestionadas por el motor. Entre toda la información que se guarda se incluye lógicamente el motor de almacenamiento utilizado por cada una:
select table_schema,table_name,engine from information_schema.tables;
Por ejemplo:
mysql> select engine from information_schema.tables where table_name='searchindex' and table_schema='mediawiki'; +--------+ | engine | +--------+ | MyISAM | +--------+ 1 row in set (0.01 sec)
¿Cómo listar los motores de almacenamiento utilizados por todas las tablas de una base de datos? Simple:
mysql> select table_name,engine from information_schema.tables where table_schema='mediawiki'; +--------------------+--------+ | table_name | engine | +--------------------+--------+ | archive | InnoDB | | category | InnoDB | | categorylinks | InnoDB | | change_tag | InnoDB | | external_user | InnoDB | | externallinks | InnoDB | | filearchive | InnoDB | | hitcounter | MEMORY | | image | InnoDB | | imagelinks | InnoDB | | interwiki | InnoDB | | ipblocks | InnoDB | | iwlinks | InnoDB | | job | InnoDB | | l10n_cache | InnoDB | | langlinks | InnoDB | | log_search | InnoDB | | logging | InnoDB | | module_deps | InnoDB | | msg_resource | InnoDB | | msg_resource_links | InnoDB | | objectcache | InnoDB | | oldimage | InnoDB | | page | InnoDB | | page_props | InnoDB | | page_restrictions | InnoDB | | pagelinks | InnoDB | | protected_titles | InnoDB | | querycache | InnoDB | | querycache_info | InnoDB | | querycachetwo | InnoDB | | recentchanges | InnoDB | | redirect | InnoDB | | revision | InnoDB | | searchindex | MyISAM | | site_stats | InnoDB | | tag_summary | InnoDB | | templatelinks | InnoDB | | text | InnoDB | | transcache | InnoDB | | updatelog | InnoDB | | uploadstash | InnoDB | | user | InnoDB | | user_former_groups | InnoDB | | user_groups | InnoDB | | user_newtalk | InnoDB | | user_properties | InnoDB | | valid_tag | InnoDB | | watchlist | InnoDB | +--------------------+--------+ 49 rows in set (0.00 sec)
#3 SHOW TABLE STATUS
Esta sentencia SQL muestra el estado de una tabla y provee gran cantidad de información útil, incluyendo el motor de almacenamiento utilizado:
mysql> use mediawiki; show table status where name='searchindex'; Database changed +-------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+---------------------+-------------------+----------+----------------+---------+ | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment | +-------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+---------------------+-------------------+----------+----------------+---------+ | searchindex | MyISAM | 10 | Dynamic | 881 | 692 | 609996 | 281474976710655 | 379904 | 0 | NULL | 2016-02-22 21:00:22 | 2016-02-22 21:00:22 | 2016-02-22 21:00:22 | latin1_swedish_ci | NULL | | | +-------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+---------------------+-------------------+----------+----------------+---------+ 1 row in set (0.00 sec)
#4 mysqlshow
El cliente mysqlshow
provee una interfaz de línea de comandos para varias sentencias SQL SHOW
. Puede ser utilizado para determinar rápidamente qué bases de datos existen, junto con sus tablas, columnas e índices. Este comando puede ser muy útil al momento de desarrollar scripts que realicen tareas de administración/monitoreo sobre bases de datos MySQL.
La opción --status
presenta la misma salida que la sentencia SQL SHOW TABLE STATUS
:
root@cloud:~# mysqlshow -u root -p --status mediawiki | grep searchindex Enter password: | searchindex | MyISAM | 10 | Dynamic | 881 | 692 | 609996 | 281474976710655 | 379904 | 0 | | 2016-02-22 21:00:22 | 2016-02-22 21:00:22 | 2016-02-22 21:00:22 | latin1_swedish_ci | | | |
Referencias
MySQL 5.7 Reference Manual / INFORMATION_SCHEMA Tables
mysql> help show create table mysql> help show table status
man mysqlshow
Fuente: linuxito