¿MySQL indexa columnas de clave externa automáticamente?
¿MySQL indexa columnas de clave externa automáticamente?
Sí, pero sólo eninnodb. Innodb es actualmente el único formato de tabla enviado que tiene claves externas implementadas.
Aparentemente se crea un índice automáticamente como se especifica en el enlace que Robert ha publicado .
InnoDB requiere índices de claves externas y claves referenciadas para que las comprobaciones de claves externas puedan ser rápidas y no requieran un escaneo de la tabla. 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. Un índice de este tipo se crea automáticamente en la tabla de referencia si no existe. (Esto contrasta con algunas versiones anteriores, en las que los índices tenían que crearse explícitamente o la creación de restricciones de clave externa fallaría). index_name, si se proporciona, se usa como se describió anteriormente.
Restricciones de InnoDB y FOREIGN KEY
Para aquellos que buscan cotizaciones de 5.7
documentos :
MySQL requiere índices de claves externas y claves referenciadas para que las comprobaciones de claves externas puedan ser rápidas y no requieran un escaneo de la tabla. 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. Un índice de este tipo se crea automáticamente en la tabla de referencia si no existe. Este índice podría eliminarse silenciosamente más adelante, si crea otro índice que pueda usarse para aplicar la restricción de clave externa. index_name, si se proporciona, se utiliza como se describió anteriormente.
No obtienes el índice automáticamente si haces ALTER TABLE (en lugar de CREATE TABLE), al menos según los documentos (el enlace es para 5.1 pero es el mismo para 5.5):
[...] Cuando agrega una restricción de clave externa a una tabla usando ALTER TABLE, recuerde crear primero los índices requeridos.