私のアプリケーションでは、通常、データにアクセスする方法として主キーを使用します。ただし、パフォーマンスを向上させるために、テーブルの列にインデックスを付ける必要があると言われました。しかし、インデックスを作成する列がわかりません。
今質問:
主キーにインデックスを作成するのは良い考えですか?
インデックスを作成する列をどのように知ることができますか?
私のアプリケーションでは、通常、データにアクセスする方法として主キーを使用します。ただし、パフォーマンスを向上させるために、テーブルの列にインデックスを付ける必要があると言われました。しかし、インデックスを作成する列がわかりません。
今質問:
主キーにインデックスを作成するのは良い考えですか?
インデックスを作成する列をどのように知ることができますか?
- 主キーにインデックスを作成するのは良い考えですか?
主キーは、Postgres で一意のインデックスを使用して自動的に実装されます。ここで完了です。
同じことがMySQLにも当てはまります。見る:
- インデックスを作成する列をどのように知ることができますか?
追加のインデックスに関するアドバイスについては、以下を参照してください。
ここでも、基本は MySQL と Postgres で同じです。しかし、Postgres には、必要に応じて、部分インデックスや関数インデックスなどのより高度な機能があります。ただし、基本から始めてください。
1) 主キーをインデックスとして作成することをお勧めしますか? (主キーが一意であると仮定すると、ID
私が知っているすべての DBMS は、PK の下に自動的にインデックスを作成します。
MySQL/InnoDB の場合、PK はインデックス化されるだけでなく、そのインデックスはclustered indexになります。
(ところで、「主キー」と言うだけで一意であることを意味するため、「主キーが一意であると仮定して」と明示的に述べる必要はありません。)
2) インデックスを作成する列をどのように知ることができますか?
それは、どのクエリをサポートする必要があるかによって異なります。
ただし、インデックスの追加は無料ではなく、エンジニアリングのトレードオフの問題であることに注意してください。クエリによってはインデックスの恩恵を受ける場合もあれば、実際に影響を受ける場合もあります。例えば:
FOO
が大幅に高速化されSELECT * FROM T WHERE FOO = ...
ます。INSERT INTO T VALUES (...)
.ほとんどの場合、INSERT での小さな速度低下よりも、SELECT での大幅な速度向上を優先しますが、常にそうであるとは限りません。
インデックス作成とデータベース パフォーマンス全般は、StackOverflow の控えめな投稿の範囲を超えた複雑なトピックですが、興味がある場合は、Use The Index、Luke! を読むことを強くお勧めします。.
主キーは、主キーとして正式に定義した場合にのみ、idex を持ちます。ほとんどの人がインデックスを作成するのを忘れているのは、一般に自動的にインデックスが作成されず、ほとんどの場合、結合に関与してインデックスが作成される外部キーです。インデックスの他の候補は、名前、部品番号、開始日など、可能な値が多数あるデータを頻繁にフィルタリングするものです。
主キーには、PostgreSQL によって自動的に作成されるインデックスが既に含まれています。列に再度インデックスを付ける必要はありません。
残りのフィールドについては、カーディナリティの把握に関する記事をご覧ください: http://kirk.webfinish.com/2013/08/some-help-to-find-uniqueness-in-a-多数のフィールドを持つ大きなテーブル/
完全に一意なフィールドは候補であり、一意性がまったくないフィールドはインデックスに使用できません。スイート スポットは、中央 (.5) のカーディナリティです。
もちろん、WHERE 句で使用している列を確認する必要があります。quals の一部ではない列にインデックスを付けても意味がありません。