ホームページ >データベース >mysql チュートリアル >mysqlを使ったインデックス作成方法とメリット・デメリットの分析を詳しく解説_MySQL
はじめに
インデックスは、MySQL がデータを効率的に取得するのに役立つデータ構造です。 これは高いパフォーマンスにとって重要ですが、忘れられたり誤解されたりすることがよくあります。 データが大きくなると、インデックスの重要性が高まります。規模が小さく負荷が軽いデータベースはインデックスがなくても良好なパフォーマンスを発揮しますが、データが増加するとパフォーマンスは急速に低下します。
なぜインデックスを作成するのですか?
これは、インデックスを作成するとシステムのパフォーマンスが大幅に向上する可能性があるためです。
まず、一意のインデックスを作成することで、データベース テーブル内のデータの各行の一意性を保証できます。
2 番目に、データの取得を大幅に高速化できます。これがインデックスを作成する主な理由でもあります。
3 番目に、テーブル間の接続を高速化できます。これは、データの参照整合性を達成する上で特に意味があります。
4 番目に、データの取得にグループ化句と並べ替え句を使用すると、クエリでのグループ化と並べ替えにかかる時間も大幅に短縮できます。
5 番目に、インデックスを使用すると、クエリ プロセス中に最適化非表示機能を使用してシステムのパフォーマンスを向上させることができます。
「インデックスを追加するとたくさんのメリットがあるのに、なぜテーブル内のすべての列にインデックスを作成しないのですか?」と疑問に思う人もいるかもしれません。この考えは合理的ですが、一方的でもあります。インデックスには多くの利点がありますが、テーブル内のすべての列にインデックスを追加するのは非常に賢明ではありません。
これは、インデックスの増加には多くのデメリットもあるためです。
まず、インデックスの作成と維持には時間がかかり、データ量が増えるとこの時間も長くなります。
第 2 に、インデックスはデータ テーブルが占有するデータ スペースに加えて、一定量の物理スペースも占有する必要があります。クラスター化インデックスを作成する場合、必要なスペースはさらに大きくなります。
3 番目に、テーブル内のデータを追加、削除、変更する場合、インデックスを動的に維持する必要があるため、データのメンテナンス速度が低下します。
インデックスの作成に適しているフィールドの種類:
インデックスはデータベーステーブルの特定の列に基づいて構築されます。したがって、インデックスを作成するときは、どの列にインデックスを付けることができ、どの列にインデックスを付けることができないかを慎重に検討する必要があります。
一般に、次のような列にインデックスを作成する必要があります。
まず、よく検索される列の検索を高速化できます。
次に、主キーである列に対して、組織テーブル内の列の一意性とデータの配置構造を強制します。3 番目に、接続でよく使用される列の場合、これらの列は主に外部キーであるため、接続が高速化されます。
4 番目に、インデックスはソートされており、指定された範囲は連続しているため、範囲に基づいて検索する必要があることが多い列にインデックスを作成します。5 番目に、頻繁に並べ替えが必要な列にインデックスを作成します。インデックスは並べ替えられているため、クエリでインデックスの並べ替えを使用して並べ替えクエリ時間を短縮できます。
6番目に、条件の判定を高速化するために、WHERE句で頻繁に使用される列にインデックスを作成します。インデックスの作成は通常、select の where 条件に基づいて行われます。たとえば、select の条件が wheref1andf2 である場合、フィールド f1 またはフィールド f2 にインデックスを作成する場合のみ役に立ちます。 f1 と f2 は同時に待機します。
インデックスの作成に適さないフィールドの種類:
また、インデックスを作成してはいけない列もあります。一般に、インデックスを作成すべきではない列には次のような特徴があります:
まず、クエリでほとんど使用または参照されない列にはインデックスを作成しないでください。これは、これらの列がめったに使用されないため、インデックスが付けられているかどうかにかかわらず、
クエリ速度は向上しません。逆に、インデックスの追加により、システムのメンテナンス速度が低下し、必要なスペースが増加します。第 2 に、データ値が少ない列のインデックスは増加させるべきではありません。これは、人事テーブルの性別列など、これらの列には値がほとんどないためです
クエリの結果では、結果セット内のデータ行がテーブル内のデータ行の大部分を占めます。つまり、テーブル内で大部分のデータ行を検索する必要があります。
インデックスを増やしても、検索は大幅に高速化されません。
第三に、テキスト、イメージ、ビットのデータ型として定義された列にはインデックスを追加しないでください。これは、これらの列のデータ量が非常に大きいか、値が非常に少ないためです。
第 4 に、変更パフォーマンスが検索パフォーマンスよりはるかに大きい場合、インデックスは作成されるべきではありません。修正性能と検索性能は相反するものだからである。
インデックスを増やすと検索パフォーマンスは向上しますが、変更パフォーマンスは低下します。インデックスを減らすと、変更パフォーマンスは向上しますが、検索パフォーマンスは低下します。
したがって、変更パフォーマンスが検索パフォーマンスよりもはるかに優れている場合は、インデックスを作成すべきではありません。
インデックスの作成方法:
1. インデックスを作成します。例: createindex<インデックスの名前>ontable_name (列のリスト);
2. altertable_nameaddindex [インデックスの名前] (列のリスト) などのテーブルを変更します。 3. テーブルの作成時にインデックスを指定します (例: createtabletable_name([...],INDEX[インデックス名](列のリスト));
テーブル内のインデックスを表示する方法:
showindexfromtable_name;インデックスを表示
インデックスの種類と作成例:
1.PRIMARYKEY (主キーインデックス)
リーリー
2.UNIQUE または UNIQUEKEY (一意のインデックス)
リーリー
3.FULLTEXT (全文インデックス)
リーリー
4.INDEX(ノーマルインデックス)
リーリー
5. 複数列インデックス (クラスタードインデックス)
リーリー
テーブル内のインデックスを変更します:
リーリー
概要
インデックスを使用すると、多数のレコードを持つテーブルのクエリ速度を向上させることができます。ただし、インデックスはスペースを占有するため、インデックスを作成する際にはこの記事を参照してください。