ホームページ  >  に質問  >  本文

Railsのcreated_atインデックス、未使用のインデックス

CacheSync というモデルがあり、mysql にはインデックスがあることが示されています。

リーリー

しかし、説明しようとすると、インデックスを使用していないと言われます:

リーリー

なぜインデックスを使用しないのでしょうか?

###ご協力いただきありがとうございます、 ケビン

P粉384679266P粉384679266183日前272

全員に返信(1)返信します

  • P粉421119778

    P粉4211197782024-03-22 10:04:01

    私の経験では、オプティマイザが条件がテーブルの 20% 以上に一致すると推定した場合、テーブル スキャンに戻ります。クラスター化インデックスからすべての行を読み取る方が、セカンダリ インデックスの値を検索してから別の検索を行ってテーブルから対応する行を取得するよりも高速であると推測されます。

    20% のしきい値は公式の機能ではなく、私が観察しただけです。 MySQL の現在のバージョンでは構成できません。

    インデックス ヒントを使用すると、テーブル スキャンのコストが高すぎることを納得させることができます。

    リーリー

    指定したインデックスがクエリ内の条件に関連していない場合にのみ、テーブル スキャンが実行されます。

    インデックス ヒントの詳細については、https://dev.mysql.com/doc/refman/8.0/en/index-hints.html を参照してください。

    私は Rails 開発者ではありませんが、この古い回答は、インデックス ヒント構文を Rails に渡す方法を示しています: https://stackoverflow.com/a/13904227/20860 わかりませんこれは現在でも行われている方法です。

    返事
    0
  • キャンセル返事