インデックスは、テーブル全体をスキャンせずに行を見つけられるようにする、独立したソート済みのデータ構造(InnoDBではB-tree)です。インデックスがなければ、検索はすべての行を読みます(full table scan)。あれば、数ステップで木をたどります。
primaryとsecondaryの違い
InnoDBでは、テーブルそのものがprimary keyインデックス、すなわちclustered indexです。行はprimary keyの順で物理的に格納されるため、primary keyでの検索は完全な行に直接たどり着きます。
は、別の列をキーとする独立したB-treeです。そのリーフノードにはインデックス対象の値とが格納されるため、secondary indexの利用は多くの場合、行の残りを取得するために2回目の検索(「clustered indexへの戻り」)のコストがかかります。
