1

とりわけ、列 A と B を含むテーブルがあるとします。テーブルに複数列のインデックス (A、B) を作成します。

クエリでインデックスの順序を考慮する必要がありますか? 例えば、

select * from MyTable where B=? and A in (?, ?, ?);

クエリでは、B を最初に、A を 2 番目に置きます。しかし、インデックスは(A、B)です。順番は関係ありますか?

更新:インデックスの順序は、左端のプレフィックス ルールに関して非常に重要であることを知っています。ただし、クエリ自体でどの列が最初に来るかは重要ですか?

4

3 に答える 3

2

インデックス内の列の順序は、MySQL オプティマイザーがインデックスを使用する方法に影響を与える可能性があります。特に、MySQL は複合インデックスの最初の部分であるため、列 A に対するクエリに複合インデックスを使用できます。

ただし、質問はクエリ内の列参照の順序を参照しています。ここでは、オプティマイザーが参照を適切に処理し、順序は重要ではありません。さまざまな句は、構文規則を満たすために特定の順序で来る必要があるため、とにかくほとんど制御できません。

複数列インデックスの最適化に関するMysqlリファレンスはこちら

于 2013-10-10T20:37:48.357 に答える
2

この場合はありませんが、EXPLAINキーワードを使用することをお勧めします。MySQL がどの最適化を使用するか (または使用しないか) を確認できます。

于 2013-10-10T20:32:46.230 に答える
1

問題があると思われる特定のクエリをテストできますが、それ以外の場合は、この最適化について心配する必要はありません。クエリは、ほとんどの場合、クエリ プランによって元の形式からマングルされます。つまり、MySQL は、速度を最適化するためにインデックスをどのように使用するかを適切に計画する必要があります。これには、条件を別の順序にする必要があるかもしれませんが、私はそうは思いません。MySQL が実際に最適化のために条件を並べ替える必要があった場合、クエリの実行に比べて非常に小さなコストになります (少なくとも結果セットが大きい場合)。

于 2013-10-10T20:32:20.610 に答える