tuning remove optimize index create mysql database indexing

remove - ¿MySQL indexa columnas de clave externa automáticamente?



repair database mysql (8)

Al parecer, un índice se crea automáticamente como se especifica en el enlace que ha publicado Robert .

InnoDB requiere índices en claves externas y claves referenciadas para que las comprobaciones de claves externas puedan ser rápidas y no requieran un escaneo de tablas. En la tabla de referencia, debe haber un índice donde las columnas de clave externa se enumeran como las primeras columnas en el mismo orden. Dicho índice se crea automáticamente en la tabla de referencia si no existe. (Esto contrasta con algunas versiones anteriores, en las que los índices debían crearse explícitamente o la creación de restricciones de clave externa fallaría). Index_name, si se da, se usa como se describió anteriormente.

Restricciones de InnoDB y FOREIGN KEY

¿MySQL indexa columnas de clave externa automáticamente?


Como se indica, lo hace para InnoDB. Al principio pensé que era extraño que muchos otros (en particular MS SQL y DB2) no lo hicieran. Los escaneos de TableSpace solo son mejores que los escaneos de índice cuando hay muy pocas filas de tablas, por lo que para la gran mayoría de los casos, una clave externa querría ser indexada. Entonces me golpeó (esto no significa necesariamente que tenga que ser un índice independiente (una columna)) en el índice FK automático de MySQL. Por lo tanto, puede que esa sea la razón por la cual MS SQL, DB2 (Oracle no estoy seguro), etc., lo dejan en manos del DBA; después de todo, múltiples índices en tablas grandes pueden causar problemas con el rendimiento y el espacio.


No es posible obtener la clave de índice automáticamente

ALTER TABLE (NAME OF THE TABLE) ADD INDEX (FOREIGN KEY)

Nombre de la tabla que ha creado, por ejemplo, fotografías y FOREIGN KEY, por ejemplo, photograph_id . El código debería ser así.

ALTER TABLE photographs ADD INDEX (photograph_id);


No obtienes el índice automáticamente si haces ALTER TABLE (en lugar de CREATE TABLE), al menos de acuerdo con los documentos (el enlace es para 5.1 pero es el mismo para 5.5):

[...] Cuando agrega una restricción de clave foránea a una tabla usando ALTER TABLE, recuerde crear primero los índices requeridos.


Para aquellos que buscan una cita de 5.7 docs :

MySQL requiere índices en claves externas y claves referenciadas para que las comprobaciones de claves externas puedan ser rápidas y no requieran un escaneo de tablas. En la tabla de referencia, debe haber un índice donde las columnas de clave externa se enumeran como las primeras columnas en el mismo orden. Dicho índice se crea automáticamente en la tabla de referencia si no existe. Este índice se puede eliminar de forma silenciosa más adelante, si crea otro índice que se pueda usar para imponer la restricción de clave externa. index_name, si se da, se usa como se describió anteriormente.


Sí, Innodb proporciona esto. Puede poner un nombre de clave externa después de la cláusula FOREIGN KEY o dejar que MySQL cree un nombre para usted. MySQL crea automáticamente un índice con el nombre foreign_key_name .

CONSTRAINT constraint_name FOREIGN KEY foreign_key_name (columns) REFERENCES parent_table(columns) ON DELETE action ON UPDATE action


Sí, pero solo en Innodb. Innodb es el único formato de tabla actualmente enviado que tiene implementadas claves externas