una tutorial tablas tabla primary primaria paso llaves llave foreign foraneas foranea español datos crear creada con como codigo clave agregar mysql sql foreign-keys indexing

tutorial - llaves foraneas mysql workbench codigo



Las claves foráneas deben ser Index en mySQL? (3)

De la documentación :

InnoDB requiere índices en claves externas y claves referenciadas para que las verificaciones de claves externas puedan ser rápidas y no requieran un escaneo de 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.

Acabo de crear mi primera tabla mySQL por mi cuenta (aparte de usar Joomla, Wordpress, etc.) y soy desarrollador de MS SQL por años, pero normalmente puedo crear fácilmente una clave externa en MS SQL pero encontré una dificultad o falta de conocimiento aquí.

Aquí están mis tablas:

usuarios

  1. user_id int primary auto_increment
  2. nombre de usuario varchar (20)
  3. contraseña varchar (20)

publicaciones

  1. post_id en auto_increment primario
  2. título varchar (100)
  3. mensaje de texto
  4. user_id int

Cuando trato de agregar una clave externa a los usuarios que hace referencia a posts->user_id , no puedo ver la opción posts->user_id en la lista de opciones Relation_view window en el panel mySQL.

Me pregunto si debería definir posts->user_id como Index o algo así. Si es así, ¿por qué?


Del Manual de referencia de MySQL :

InnoDB requiere índices en claves externas y claves referenciadas para que las verificaciones de claves externas puedan ser rápidas y no requieran un escaneo de 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. Dicho índice se crea automáticamente en la tabla de referencia si no existe. (Esto está en contraste 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 proporciona, se usa como se describió anteriormente.

A diferencia de SQL Server, que no requiere que se indexen FK ... sin embargo, las recomendaciones que he visto sugieren que casi siempre está indexando sus FK aunque no sea necesario.


Respuesta corta: Sí, MySQL te obliga a indexar la clave externa.

InnoDB requiere índices en claves externas y claves referenciadas para que las verificaciones de claves externas puedan ser rápidas y no requieran un escaneo de tabla.

Puede leer más acerca de las claves externas en las páginas de documentación de MySQL: http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html