ユーザーアイコン

mizuko

約1か月前

0
0

MySQLのインデックス利用の仕組みと最左プレフィックスルール

MySQL

MySQLは検索時に完全一致のインデックスがなくても、既存インデックスを効率的に活用する。

最左プレフィックスルール 複合インデックスの左側から連続するカラムまでを使用して絞り込み、残りはメモリ上でフィルタリング。

例:PRIMARY KEY (tenant_id, mail_integration_message_id, email, role) の場合

-- この検索でPRIMARY KEYが有効 WHERE tenant_id = ? AND mail_integration_message_id = ? AND email = ? AND role = ? AND person_id = ? -- 最初の4カラムでインデックス検索、person_idはUsing whereでフィルタ

インデックス追加の判断基準

  • 既存インデックスで十分絞り込める場合、追加インデックスは不要
  • カーディナリティ(選択性)が重要。最初の数カラムで1-2件に絞れるなら十分
  • 追加インデックスのコスト(ストレージ、更新性能)とのトレードオフを考慮

Index Merge MySQLは状況により複数のインデックスを組み合わせることも可能。ただし単一の適切なインデックスの方が効率的。

実践的な考え方:「このクエリで何件まで絞り込めるか」を意識し、数件程度なら追加のメモリフィルタで十分。