インデックスを追加することが常にクエリのパフォーマンスを向上させるわけではありません。不適切なインデックスは、クエリを大幅に遅くする可能性があります。データベースインデックスは、特定の列のソートされたコピーとテーブル行へのポインタを格納する別のデータ構造であり、より高速なデータ取得のためのロードマップとして機能します。PostgreSQLやMySQLで一般的に使用されるB-Treeインデックスは、データをソートされた階層的なツリー構造で整理し、範囲クエリやソートに適しています。ハッシュインデックスは、完全一致には高速ですが、範囲クエリには効果がありません。高カーディナリティ列(一意な値)にインデックスを付けるとクエリが高速化されますが、低カーディナリティ列にインデックスを付けると、ランダムI/Oが過剰になり、遅くなる可能性があります。インデックスは、INSERT、UPDATE、DELETEの時間を増加させ、ストレージ容量を消費するため、書き込みパフォーマンスに影響を与えます。スマートなインデックス戦略には、主キー、外部キー、頻繁にクエリされる高カーディナリティ列、および複数列クエリ用の複合インデックスへのインデックス付けが含まれます。低カーディナリティ列、小さなテーブル、めったに使用されない列、および頻繁に更新される列には、必要がない限りインデックスを付けないことが重要です。インデックス付けの前後に`EXPLAIN ANALYZE`を使用してクエリのパフォーマンスを測定することで、実際のインパクトを判断できます。高カーディナリティ列に焦点を当て、書き込みパフォーマンスを考慮した戦略的なインデックス付けは、より高速なクエリと効率的なリソース使用につながります。
dev.to
Database Indexing Done Right: Why Your "Optimized" Queries Might Be Slower Than Before
Create attached notes ...
