データベースのインデックスがどのように機能するかについての簡単な質問です。
列id(primary_key)、名前、およびGPAを持つテーブル「Student」があるとします。id にインデックスがあり、他の列にはインデックスがないと仮定します
名前とGPA(IDではなく)を使用してレコードを照会すると、すべてのレコードで一致を検索する必要があります。ここでのインデックスの利点は何ですか?
インデックスは、クエリにインデックス付きの列が含まれている場合にのみ有効ですか?
データベースのインデックスがどのように機能するかについての簡単な質問です。
列id(primary_key)、名前、およびGPAを持つテーブル「Student」があるとします。id にインデックスがあり、他の列にはインデックスがないと仮定します
名前とGPA(IDではなく)を使用してレコードを照会すると、すべてのレコードで一致を検索する必要があります。ここでのインデックスの利点は何ですか?
インデックスは、クエリにインデックス付きの列が含まれている場合にのみ有効ですか?
名前とGPA(IDではなく)を使用してレコードをクエリすると、一致するすべてのレコードを検索する必要があります。ここでのインデックスの利点は何ですか?
あなたは正しいです。一意のインデックスも一意性を強制する可能性があることを除いて、利点はありません
インデックスは、クエリにインデックス付きの列が含まれている場合にのみ有効ですか?
一致する行を見つける場合は基本的にはい、ただしorder by
、インデックス付きの列が含まれている場合は、インデックスを使用して並べ替えを行うこともできます
ボヘミアンの答えにいくつかの例を追加するだけです(そしてSQL RDBMSを想定しています):
Student(name) のインデックス IX1 は、次のクエリに役立ちます。
SELECT * FROM Student WHERE name = 'Bloggs';
同様に、Student(GPA) の IX2 というインデックスが必要になります。
SELECT * FROM Student WHERE GPA between 1 and 2;
上記のインデックス IX1 と IX2 の両方がある場合、SQL は次のようなクエリでいずれかを「選択」します。
SELECT * FROM Student WHERE name = 'Bloggs' and GPA between 1 and 2;
インデックス内のフィールドのみを使用するクエリは、インデックスから完全に処理できます (つまり、SQL がテーブルまたはクラスターに内部的に「結合」する必要はありません)。たとえば、名前がインデックスにあるため、以下は完全に IX1 から提供されます。
SELECT name FROM Student WHERE name = 'Bloggs';
SQL がインデックスを使用するには、インデックスに適切な「選択性」がなければなりません。たとえば、データベース内の EVERYONE の名前が 'Bloggs' の場合、SQL はおそらくインデックスをバイパスし、代わりにテーブルをスキャンします。