SQLの選択度(selectivity)について
SQLの選択度(selectivity)とは、データベースクエリにおいて特定の条件がどれだけの行を返すかを示す指標
選択度は、インデックスの有効性やクエリの最適化に大きな影響を与える
選択度の定義
選択度は、ある条件によって返される行の割合を示す
選択度 = 条件に合致する行の数 / テーブルの総行数
選択度が低い(0に近い)場合、その条件は少数の行を返すことを意味し、選択度が高い(1に近い)場合、その条件は多数の行を返すことを意味する
選択度の重要性
- インデックスの効率化:
- 選択度が低い場合、インデックスを使用することが効果的。少数の行を返すクエリに対してインデックスを使うことで、検索時間を大幅に短縮できる。
-
選択度が高い場合、インデックスを使用することが逆に非効率になることがある。大量の行をスキャンするため、全表スキャンの方が速いこともある
-
クエリの最適化:
- データベースエンジンはクエリプランを決定する際に選択度を考慮する。選択度が低い条件を含むクエリはインデックススキャンを選択し、選択度が高い条件を含むクエリは全表スキャンを選ぶことが多い。
選択度の計算
選択度は統計情報から計算される。多くのデータベース管理システム(DBMS)は、テーブルやインデックスに関する統計情報を自動的に収集し、選択度を計算する。 これには以下のような情報が含まれる: - データ分布: 列ごとの値の分布 - ユニーク値の数: 列内の異なる値の数 - 頻度分析: 各値の出現頻度
選択度とクエリ最適化の実際の利用
選択度を理解し、適切なインデックスを作成することは、データベースパフォーマンスの向上に直結します。以下は一般的なガイドラインです:
高選択度(0.1未満): インデックスを使用する価値が高い。 中選択度(0.1〜0.9): 状況によってインデックスの効果が異なる。場合によってはインデックスが有効。 低選択度(0.9以上): インデックスの使用は非効率な場合が多い。