質問: MySQLのインデックスについて質問です。 カーディナリティの低いものにインデックスをつけるべきではない、と考えていたのですが カーディナリティが低くても、対象テーブルのレコードの分布に偏りがある場合はインデックスを貼ると効果がでるのでしょうか。 例えば、商品の在庫表などで 販売ステータスという列があり、ステータスは「未販売」「販売済み」という種類があったとします。 普通に考えれば、このステータスカラムにインデックスを付けることはカーディナリティの低いと思いますが 販売済みステータスは増え続けるはずですので、時を経るごとに未販売ステータスのレコードが極端に少なくなります。 この場合、インデックスを貼ることで高速化が図れるのでしょうか。 ご回答よろしくお願いします。
回答: 今回のケースではインデックスは不得手なのではないかな思います。 更新を多く伴うテーブルのカラム(ステータスなので更新が多そうな気がする)にインデックスを張ると、 インデックス自体の更新も発生するため一般的には逆にパフォーマンスに悪影響が出る恐れも高いです。 takasima20さんのおっしゃる通り、 レスポンスが場合は先ずはボトルネックとなっている箇所を特定するのが重要です。 クエリに問題がありそうということでしたら、一度実行計画を見てみてはいかがでしょう? ### 追記 分布に偏りがある方がインデックスの効果は高いですね。 素でボケをかましてました;