回答:
はい、ただしオンのみ innodb。Innodbは現在、外部キーが実装されている唯一の出荷されたテーブル形式です。
どうやらロバートが投稿したリンクで指定されているように、インデックスが自動的に作成されます。
InnoDBは外部キーと参照されたキーのインデックスを必要とするため、外部キーチェックは高速で、テーブルスキャンを必要としません。参照テーブルには、外部キー列が同じ順序で最初の列としてリストされているインデックスが必要です。このようなインデックスは、存在しない場合、参照テーブルに自動的に作成されます。(これは、インデックスを明示的に作成する必要があるか、外部キー制約の作成が失敗するいくつかの古いバージョンとは対照的です。)index_nameが指定されている場合は、前述のように使用されます。
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.
はい、InnoDBおよびFOREIGN KEY制約を参照してください。
少なくともドキュメントに従って(CREATE TABLEではなく)ALTER TABLEを実行すると、インデックスは自動的に取得されません(リンクは5.1ですが、5.5でも同じです)。
[...] ALTER TABLEを使用してテーブルに外部キー制約を追加するときは、最初に必要なインデックスを作成することを忘れないでください。
述べたように、それはInnoDBのために行います。最初は、他の多くの(特にMS SQLとDB2)がそうでないのは奇妙だと思いました。TableSpaceスキャンは、テーブル行が非常に少ない場合にのみインデックススキャンよりも優れています。そのため、ほとんどの場合、外部キーにインデックスを付ける必要があります。その後、それはちょっと私を襲った-これは必ずしもそれがスタンドアロン(1列)インデックスである必要があることを意味しない-それはMySQLの自動FKインデックスにある。だから、それがMS SQL、DB2(Oracleはよく分からない)などがDBAに任せる理由かもしれません。大きなテーブルにすべての複数のインデックスがあると、パフォーマンスとスペースに問題が発生する可能性があります。