ブール型フィールドのインデックス作成によるパフォーマンスへの影響
データベース システムでは、フィールドのインデックス作成により、データベース エンジンがスキャンせずにデータを迅速に検索できるため、クエリのパフォーマンスが向上します。テーブル全体。ただし、ブール型フィールドのインデックス作成によるパフォーマンスの向上については議論の的となっています。
ブール型フィールドのインデックス作成によりパフォーマンスは向上しますか?
WHERE boolean_field= のような句を使用してクエリを実行する場合true の場合、ブール型フィールドにインデックスを付けると、確かにパフォーマンスが向上します。 InnoDB などのデータベース エンジンは、ブール型フィールドに対してビットマップ インデックス作成と呼ばれる特別な技術を利用します。この手法では、フィールド値 (true/false) に基づいてテーブルをパーティションに分割します。
ビットマップ インデックスの仕組み
ビットマップ インデックスは、テーブル内の各行にビットを割り当てます。テーブル。ビットが 1 に設定されている場合、対応する行のブール型フィールドの値が true であることを示します。次に、エンジンはこれらのビットマップを含むインデックスを作成します。
WHERE boolean_field=true のようなクエリを実行すると、エンジンは値 true に対応するパーティションを見つけます。次に、ビットマップをスキャンして基準に一致する行を特定し、他のパーティションの残りの行をスキップします。これにより、テーブル全体をスキャンする場合と比較して、チェックする必要がある行の数が大幅に減少します。
経験的な例
提供された回答で述べたように、ブール型フィールドのインデックスにより、400 万行のテーブルでのクエリが桁違いに高速化されました。 9 秒だった最初の実行時間は、数分の 1 秒にまで短縮されました。これは、ビットマップ インデックス作成によって潜在的なパフォーマンスが向上することを示しています。
結論
ブール型フィールドのインデックス作成は無駄であるという概念に反して、場合によっては、パフォーマンスが大幅に向上する可能性があります。ここで、クエリは特にブール フィールドでフィルタリングし、データ分散によりビットマップ インデックスの効果的な使用が可能になります。したがって、データセットが特定の値に対して大きな偏りを示している場合、またはクエリ ワークロードにそれらのフィールドのフィルタリングが頻繁に含まれる場合は、ブール型フィールドのインデックス作成を検討してください。
以上がブール型フィールドにインデックスを付けると本当にクエリのパフォーマンスが向上しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。