Este artículo demuestra cómo listar todos los índices de una base de datos MySQL desde línea de comandos.

Para listar los índices de las bases de datos es necesario consultar la tabla information_schema.statistics de MySQL.

La siguiente consulta SQL obtiene la base de datos, nombre del índice, columna indizada, tabla, tipo de índice y si es o no UNIQUE para todos los índices presentes en el motor:

select index_schema,
       index_name,
       group_concat(column_name order by seq_in_index) as index_columns,
       index_type,
       case non_unique
            when 1 then 'not unique'
            else 'unique'
            end as is_unique,
        table_name
from information_schema.statistics
where table_schema not in ('information_schema', 'mysql',
                           'performance_schema', 'sys')
group by index_schema,
         index_name,
         index_type,
         non_unique,
         table_name
order by index_schema,
         index_name;

Si en lugar de listar todos los índices de todas las bases de datos se desea listar sólo los índices de una base de datos específica, ejecutar en cambio:

select index_schema,
       index_name,
       group_concat(column_name order by seq_in_index) as index_columns,
       index_type,
       case non_unique
            when 1 then 'not unique'
            else 'unique'
            end as is_unique,
        table_name
from information_schema.statistics
where table_schema='BASE'
group by index_schema,
         index_name,
         index_type,
         non_unique,
         table_name
order by index_schema,
         index_name;

Cambiando BASE por el nombre de la base de datos en cuestión.

Ejemplo:

MariaDB [(none)]> select index_schema,
    ->        index_name,
    ->        group_concat(column_name order by seq_in_index) as index_columns,
    ->        index_type,
    ->        case non_unique
    ->             when 1 then 'not unique'
    ->             else 'unique'
    ->             end as is_unique,
    ->         table_name
    -> from information_schema.statistics
    -> where table_schema not in ('information_schema', 'mysql',
    ->                            'performance_schema', 'sys')
    -> group by index_schema,
    ->          index_name,
    ->          index_type,
    ->          non_unique,
    ->          table_name
    -> order by index_schema,
    ->          index_name
    -> limit 10;
+----------------+-------------------------+-------------------------------+------------+------------+---------------------------+
| index_schema   | index_name              | index_columns                 | index_type | is_unique  | table_name                |
+----------------+-------------------------+-------------------------------+------------+------------+---------------------------+
| mydb-testingv2 | access                  | access                        | BTREE      | not unique | tkcp4_finder_taxonomy     |
| mydb-testingv2 | cat_idx                 | extension,published,access    | BTREE      | not unique | tkcp4_categories          |
| mydb-testingv2 | client_id_guest         | client_id,guest               | BTREE      | not unique | tkcp4_session             |
| mydb-testingv2 | default_idx             | is_default,id                 | BTREE      | not unique | tkcp4_osmap_sitemaps      |
| mydb-testingv2 | element_clientid        | element,client_id             | BTREE      | not unique | tkcp4_extensions          |
| mydb-testingv2 | element_folder_clientid | element,folder,client_id      | BTREE      | not unique | tkcp4_extensions          |
| mydb-testingv2 | email                   | email                         | BTREE      | not unique | tkcp4_users               |
| mydb-testingv2 | extension               | type,element,folder,client_id | BTREE      | not unique | tkcp4_extensions          |
| mydb-testingv2 | fk_sitemaps_idx         | sitemap_id                    | BTREE      | not unique | tkcp4_osmap_sitemap_menus |
| mydb-testingv2 | idx_access              | access                        | BTREE      | not unique | tkcp4_categories          |
+----------------+-------------------------+-------------------------------+------------+------------+---------------------------+
10 rows in set (0.006 sec)

Las columnas en esta salida tienen el siguiente significado:

  • index_schema: nombre de la base de datos.
  • index_name: nombre del índice.
  • index_columns: columnas indexadas por el índice.
  • index_type: tipo del índice (BTREE, RTREE, FULLTEXT, HASH, SPATIAL).
  • is_unique: si es o no UNIQUE (si los valores del índice deben ser únicos o no).
  • table_name: nombre de la tabla a la que pertenecen las columnas.

Referencias

Compartí este artículo