コンテンツにスキップ

SQLの選択度(selectivity)について

SQLの選択度(selectivity)とは、データベースクエリにおいて特定の条件がどれだけの行を返すかを示す指標
選択度は、インデックスの有効性やクエリの最適化に大きな影響を与える

選択度の定義

選択度は、ある条件によって返される行の割合を示す

選択度 = 条件に合致する行の数 / テーブルの総行数

選択度が低い(0に近い)場合、その条件は少数の行を返すことを意味し、選択度が高い(1に近い)場合、その条件は多数の行を返すことを意味する

選択度の重要性

  1. インデックスの効率化:
  2. 選択度が低い場合、インデックスを使用することが効果的。少数の行を返すクエリに対してインデックスを使うことで、検索時間を大幅に短縮できる。
  3. 選択度が高い場合、インデックスを使用することが逆に非効率になることがある。大量の行をスキャンするため、全表スキャンの方が速いこともある

  4. クエリの最適化:

  5. データベースエンジンはクエリプランを決定する際に選択度を考慮する。選択度が低い条件を含むクエリはインデックススキャンを選択し、選択度が高い条件を含むクエリは全表スキャンを選ぶことが多い。

選択度の計算

選択度は統計情報から計算される。多くのデータベース管理システム(DBMS)は、テーブルやインデックスに関する統計情報を自動的に収集し、選択度を計算する。 これには以下のような情報が含まれる: - データ分布: 列ごとの値の分布 - ユニーク値の数: 列内の異なる値の数 - 頻度分析: 各値の出現頻度

選択度とクエリ最適化の実際の利用

選択度を理解し、適切なインデックスを作成することは、データベースパフォーマンスの向上に直結します。以下は一般的なガイドラインです:

高選択度(0.1未満): インデックスを使用する価値が高い。 中選択度(0.1〜0.9): 状況によってインデックスの効果が異なる。場合によってはインデックスが有効。 低選択度(0.9以上): インデックスの使用は非効率な場合が多い。

Reference