データベースの正規化後もインデックス作成が必要ですか


14

適切な正規化を行った後でも、テーブルのインデックスを作成する必要がありますか?これはパフォーマンスにどのように影響しますか?適切に正規化した後、何らかの形でパフォーマンスに影響を与えますか?

主キーと外部キーが既にある場合、通常どの列にインデックスが付けられますか?

データベースを正規化することはすでに効果的であるようです。しかし、索引付けがデータベースに与える影響をスキップしたかもしれません。これは、クエリを使用する場合にのみ有効ですか?これはどのように機能/実行し、データベースを改善しますか?


5
主キーと外部キーが既にある場合、通常どの列にインデックスが付けられますか?日付。名前。検索や並べ替えに必要なものはすべて。
Carson63000

主キーのインデックスはカウントされませんか?
-CodesInChaos

回答:


34

はい。実際、インデックスにもっと注意を払う必要があるかもしれません。正規化は、最適なストレージに関するものです。複雑な結合を持つより複雑なクエリが使用されるため、検索速度と相反することがよくあります。速い検索速度を必要とするデータベースを保守する人々は、検索を容易にするために、非正規化するか、わずかに正規化されていない構造にデータを配置することがあります。


21
正規化の目標は、ストレージの効率ではなく、挿入、更新、および削除の依存関係の削除です。 さらに読む

4
@MichealTには、効率に関するものではないことに同意します。論理的な一貫性は、私がリンクから得たものでした。
ジェフ

議論の余地のある「効率」という単語を削除し(基本的には正規化の一般的な目的を要約すると思いますが)、代わりに「最適」という単語を使用して、意味を読者に任せます。正規化の実際の目的は、データベースが正規化された後でもインデックスがまだ必要な理由に実際には関係ありません。
GrandmasterB

56

データベースのパフォーマンスのためにインデックス作成が行うことを誤解していると思います。

インデックスは、データベース行を見つけるのに役立ちます。インデックスは、特別なデータ構造であり、追加のディスク領域と挿入および更新時のパフォーマンスと引き換えに、データベースエンジンが一致する行に戻るのに役立ちます。

最新の状態を維持するには余分なスペースとコスト(わずかな)パフォーマンスが必要になるため、データベース設計者はアプリケーションとクエリパターンに合わせてインデックスを明示的に作成する必要があります。

インデックスはデータベースの正規化に直交しています。


4

はい、正規化後もインデックス作成が必要です。

作業しているテーブルは、正規化前のテーブルと同じくらい役立ちます。実際には、それ自体は同じです:テーブル。

ただし、考慮しなければならないことの1つは、インデックスを使用すると、データをより迅速に検索できるようになることです。データベースの設計の正規化は常に適切ですが、パフォーマンス上の理由から、実装を非正規化する必要がある場合があります。しかし、それはケースバイケースでのみです。


2

はい。

インデックスは、データの検索を高速化する方法です。クエリの中には、主にデータベースエンジンによって暗黙的にインデックス付けされる主キーによるものもありますが、他のクエリは他の列を使用する可能性があります。多くの場合、一部のクエリは一意ではない列で検索するため、正規化後は主キーになりません。おそらく、そのような列にインデックスを付ける必要があります。

作成するインデックスを知る方法は1つしかありません。アプリケーション内のすべてのクエリを取得し、それらの代表的なサンプルパラメータを見つけて、データベースエンジンにクエリプランを表示させ(すべてのデータベースエンジンにはEXPLAINEXPLAIN QUERY PLANまたは同様のコマンドがあり、エンジンごとに異なる呼び出しが行われます)、所要時間をテストします。遅いインデックスを高速化するインデックスを作成するよりも。そして、あなたが試みたが、リソースの浪費を避けるのを助けなかったインデックスを再び落とすことを忘れないでください。


1

インデックスは通常、最小のテーブルを除くすべてのテーブルで必要です。ほとんどすべての外部キーにインデックスを作成する必要があります。FKを設定するだけでは、インデックスがあることを意味しません(少なくとも一部のデータベースでは、dbのドキュメントを確認してください)。頻繁に参加するか、where句で使用するフィールドは、それらが恩恵を受けるものである場合(たとえば、ブール値が恩恵を受けないようにデータに一定量の可変性が必要な場合)、インデックスを付けることができるものである場合、インデックスを作成する必要があります。

ただし、すべてのインデックスはinserts \ updates \ deletesの速度を低下させますが、選択を高速化するため、インデックスを慎重に選択してください。

インデックスは、データベースの許容可能なパフォーマンスにとって重要です。


0

3番目の標準形式では、すべての主キーのインデックスが必ず必要になります。

他のインデックスが必要かどうかは、データベースの使用方法によって異なります。たとえば、特定の郵便番号で顧客を定期的に検索する場合、顧客テーブルのzip_code列にインデックスを付けることをお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.