2016-10-24 4 views
0

2つのフィールド、field1とfield2、およびfield1_field2(field1、field2)で作成されたコンポジットインデックスを持つテーブル "test"があります。 ここではsql:select * from test force index(field1_field2)フィールド1> 100およびフィールド2 = 2の制限200mysqlの範囲クエリでコンポジットインデックスを使用する方法

非常にうまく動作しません。 私はそれを説明し、インデックスのクエリで使用される唯一のフィールド1の条件、フィールド2の条件が無視されたことがわかった....

私はなぜ知っている、と私は完全にフィールド1のデータがたくさんある

に答える必要がありますしたいです> 100とそのクエリのフィールド2 = 2

+0

インデックス列を '(field2、field1)'にスワッピングしてみてください。 – JimmyB

+0

また、[ここ](http://dev.mysql.com/doc/refman/5.7/en/range-optimization.html#range-access-multi-part)を読んでください。 – JimmyB

答えて

1

とのデータの多くは、あなたがそのためには、INDEX(field2, field1)を必要としています。 =列を最初にインデックスに入れます。 「範囲」(たとえば>など)をヒットすると、それが使用されるインデックスの最後の部分になります。

ここにはIndex Cookbookがあります。

関連する問題