¿Cómo ver los índices de una base de datos o tabla en MySQL?


Respuestas:


794

Para ver el índice de una tabla específica, use SHOW INDEX:

SHOW INDEX FROM yourtable;

Para ver los índices de todas las tablas dentro de un esquema específico, puede usar la tabla STATISTICS de INFORMATION_SCHEMA:

SELECT DISTINCT
    TABLE_NAME,
    INDEX_NAME
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'your_schema';

Al eliminar la cláusula where, se mostrarán todos los índices en todos los esquemas.


10
Tenga en cuenta que la DISTINCTpalabra clave enmascarará algunos índices: tengo una tabla donde un índice tiene el mismo nombre pero se usa en dos columnas diferentes, por lo que el ejemplo de esquema de información aquí solo mostrará un índice.
Ben

Tuve que agregar from mydbcomo se muestra en la respuesta de LiorK.
Nate

@ Mark Byers ¿Hay alguna forma de ver la tabla de índice en sí? ¿Cómo genera SQL el archivo de índice internamente? ¿Cómo almacena un puntero de un registro de la tabla de índice a la tabla principal?
yajant b

Entonces mi tabla aparece en INFORMATION_SCHEMA.STATISTICS pero solo tiene una entrada, index_name. No hay entrada adicional para indicar el nombre de la columna. Todas las otras tablas tienen múltiples entradas que muestran algo como esto: PRIMARY c1, c2 donde c1, c2 constituyen la clave primaria compuesta. ¿Alguna idea de por qué?
Stevers

56

Si desea ver todos los índices en todas las bases de datos a la vez:

use information_schema;
SELECT * FROM statistics;

44
Como una frase:SELECT * FROM information_schema.statistics;
enarmónica


7

Puede usar esta consulta para obtener el no de índices, así como los nombres de índice de cada tabla en la base de datos especificada.

SELECT TABLE_NAME,
       COUNT(1) index_count,
       GROUP_CONCAT(DISTINCT(index_name) SEPARATOR ',\n ') indexes
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'mydb'
      AND INDEX_NAME != 'primary'
GROUP BY TABLE_NAME
ORDER BY COUNT(1) DESC;

5

Propongo esta consulta:

SELECT DISTINCT s.*
FROM INFORMATION_SCHEMA.STATISTICS s
LEFT OUTER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS t 
    ON t.TABLE_SCHEMA = s.TABLE_SCHEMA 
       AND t.TABLE_NAME = s.TABLE_NAME
       AND s.INDEX_NAME = t.CONSTRAINT_NAME 
WHERE 0 = 0
      AND t.CONSTRAINT_NAME IS NULL
      AND s.TABLE_SCHEMA = 'YOUR_SCHEMA_SAMPLE';

Encontraste todo el índice solo índice.

Considerar.



2

Para verificar todos los índices deshabilitados en db

SELECT INDEX_SCHEMA, COLUMN_NAME, COMMENT 
FROM information_schema.statistics
WHERE table_schema = 'mydb'
AND COMMENT = 'disabled'

2

Puede verificar sus índices en MySQL workbench. Debajo de las pestañas de informes de rendimiento, puede ver todos los índices usados ​​e índices no usados ​​en el sistema. o puedes disparar la consulta.

select * from sys.schema_index_statistics;

Paul, ¿qué herramienta estás usando? Este código funciona en mysql workbeanch.
Ganesh Giri

Lo usé en el shell de MySQL
Paul Basenko

¿Puedes probar este usando Mysql Workbench? seleccione * de sys.schema_index_statistics;
Ganesh Giri

2

Esto funciona en mi caso para obtener el nombre de la tabla y el nombre de la columna en la tabla correspondiente para los campos indexados.

SELECT TABLE_NAME , COLUMN_NAME, COMMENT 
FROM information_schema.statistics
WHERE table_schema = 'database_name';
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.