dateTimeのdayとIntegerのuser_idという名前の 2 つの列を持つテーブル/スキーマがあります。両方の列にインデックスを作成したことを知っています。
インデックスによって使用される追加スペースの大部分と 2 つの列しかないことを考えると、インデックス作成によって得られるパフォーマンスの向上はそれだけの価値があるでしょうか? それらをどのように正当化しますか?
MongoDB または MySQL を使用する場合、これはどのように異なりますか?
dateTimeのdayとIntegerのuser_idという名前の 2 つの列を持つテーブル/スキーマがあります。両方の列にインデックスを作成したことを知っています。
インデックスによって使用される追加スペースの大部分と 2 つの列しかないことを考えると、インデックス作成によって得られるパフォーマンスの向上はそれだけの価値があるでしょうか? それらをどのように正当化しますか?
MongoDB または MySQL を使用する場合、これはどのように異なりますか?
インデックス作成によって得られるパフォーマンスの向上はそれだけの価値がありますか
実行するクエリによって異なります。
WHERE day = ...
れるインデックスが必要になります。インデックスを適切に使用すると、特に大規模なデータ セットの場合、クエリを何桁も高速化できます。day
結局のところ、現実的な量のデータを測定して、独自の結論を出すことをお勧めします。
ところで、InnoDB を使用している場合、テーブルはクラスター化され( InnoDB クラスター化インデックスについても参照)、テーブル全体が実質的にプライマリ インデックスに格納されます。クラスター化されたテーブルのセカンダリ インデックスには、PK フィールドのコピーが含まれていますuser_id
。また、テーブルには 2 つのフィールドしかないため、{ day
} のセカンダリ インデックスも同様にカバーuser_id
され、クラスター化されたテーブルで発生する可能性がある二重ルックアップを回避します。事実上、2 つの別個の (ただし同期された) B ツリーと、どちらにアクセスしてもインデックスのみのスキャンになります (これは良いことです)。もちろん、単に { の代わりに{ day
, } に複合インデックスを明示的に作成することもできます。user_id
day
}、非常によく似た効果があります。