インデックスの質問に関しては、インデックスが望ましいだけでなく、必要です。 物事を「スピードアップ」する。私が理解しているように(「素人」の用語で)、インデックスの機能は、テーブル内のデータの検索と回復を高速化することです。
インデックスを使用する理由:
- 各テーブルの各行を一意に識別します(主キーは結局のところインデックスです)
- インデックスは並べ替えられます(データが並べ替えられていない場合でも)
- 検索とフィルターの高速化:インデックスは、テーブル内のデータの配置を「保持」するため(回復するデータを「特定」するため)、データの回復を高速化します。また、データベースエンジンがデータをフィルタリングするのが簡単になります(並べ替えられたをフィルタリングする方が常に高速で簡単です。 スクランブルよりもデータ データ)
- 関連テーブルを使用する場合のデータの回復方法を最適化する:主キーと外部キーの関係を含むクエリを高速化するには、すべての外部キーにインデックスを付ける必要があります
インデックスを作成する必要があるフィールドを決定するために使用するいくつかの「経験則」:
- すべての主キーにインデックスが付けられます(明らか 1つ:主キーは一意であり、nullではない必要があります)
- すべての外部キーにインデックスを付ける必要があります(プライマリと外部キーの関係を効率的にするため)
- 検索を実行する必要があるすべての数値または日付フィールドにインデックスを付ける必要があります。そうは言っても、私は
double
を避けようとします (またはその他の浮動小数点数値タイプ)フィールドは、通常、検索対象ではない値を格納するために使用されるため、インデックスが作成されます。 - すべての
char
またはvarchar
検索を実行する必要があるフィールドには、インデックスを付ける必要があります。text
のインデックスは避けてください フィールドには非常に大きな値を保持できるためです。 - 避ける バイナリのインデックス作成(
blob
)フィールド...意味がありません - しないでください すべてにインデックスを付けるという誘惑に陥ります。時間をかけて、必須のフィールドを決定してください インデックスが作成され、どのフィールドが禁止であるか インデックスに登録されます。