CacheSync というモデルがあり、mysql にはインデックスがあることが示されています。
リーリーしかし、説明しようとすると、インデックスを使用していないと言われます:
リーリーなぜインデックスを使用しないのでしょうか?
###ご協力いただきありがとうございます、 ケビン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 わかりませんこれは現在でも行われている方法です。