Respostas:
Sim, mas apenas em innodb. Atualmente, o Innodb é o único formato de tabela enviado que possui chaves estrangeiras implementadas.
Aparentemente, um índice é criado automaticamente, conforme especificado no link que Robert postou .
O InnoDB requer índices em chaves estrangeiras e chaves referenciadas para que as verificações de chave estrangeira possam ser rápidas e não exigir uma varredura de tabela. Na tabela de referência, deve haver um índice em que as colunas de chave estrangeira sejam listadas como as primeiras colunas na mesma ordem. Esse índice é criado na tabela de referência automaticamente se ele não existir. (Isso contrasta com algumas versões mais antigas, nas quais os índices precisavam ser criados explicitamente ou a criação de restrições de chave estrangeira falharia.) Index_name, se fornecido, é usado como descrito anteriormente.
InnoDB permits a foreign key to reference any index column or group of columns. However, in the referenced table, there must be an index where the referenced columns are the first columns in the same order.
Sim, consulte Restrições InnoDB e FOREIGN KEY .
Você não obtém o índice automaticamente se fizer um ALTER TABLE (em vez de CREATE TABLE), pelo menos de acordo com os documentos (o link é para 5.1, mas é o mesmo para 5.5):
[...] Ao adicionar uma restrição de chave estrangeira a uma tabela usando ALTER TABLE, lembre-se de criar os índices necessários primeiro.
Para quem procura cotações de 5.7
documentos :
O MySQL requer índices em chaves estrangeiras e chaves referenciadas para que as verificações de chaves estrangeiras possam ser rápidas e não exigir uma varredura de tabela. Na tabela de referência, deve haver um índice em que as colunas de chave estrangeira sejam listadas como as primeiras colunas na mesma ordem. Esse índice é criado na tabela de referência automaticamente se ele não existir. Esse índice pode ser eliminado silenciosamente mais tarde, se você criar outro índice que possa ser usado para impor a restrição de chave estrangeira. index_name, se fornecido, é usado como descrito anteriormente.
Como afirmado, ele faz para o InnoDB. No começo, achei estranho que muitos outros (em particular o MS SQL e o DB2) não o fizessem. As varreduras do TableSpace são melhores do que as varreduras de índice quando existem muito poucas linhas de tabela - portanto, para a grande maioria dos casos, uma chave estrangeira deseja ser indexada. Então isso me atingiu - isso não significa necessariamente que deve ser um índice independente (uma coluna) - onde está no índice FK automático do MySQL. Portanto, talvez seja por isso que o MS SQL, o DB2 (Oracle não tenho certeza) etc deixem para o DBA; afinal, vários índices em tabelas grandes podem causar problemas de desempenho e espaço.
Sim, Innodb
forneça isso. Você pode colocar um nome de chave estrangeira após a FOREIGN KEY
cláusula ou deixar que o MySQL crie um nome para você. O MySQL cria automaticamente um índice com o foreign_key_name
nome.
CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name (columns)
REFERENCES parent_table(columns)
ON DELETE action
ON UPDATE action
Não é possível obter a chave de índice automaticamente
ALTER TABLE (NAME OF THE TABLE) ADD INDEX (FOREIGN KEY)
Nome da tabela que você criou, por exemplo, fotografias e FOREIGN KEY, por exemplo photograph_id
. O código deve ser assim
ALTER TABLE photographs ADD INDEX (photograph_id);