クエリ条件がPARTにのみ適用される場合、インデックスの順序が重要になります インデックスの。検討してください:
-
SELECT * FROM table WHERE first_name="john" AND last_name="doe"
-
SELECT * FROM table WHERE first_name="john"
-
SELECT * FROM table WHERE last_name="doe"
インデックスが(first_name
の場合 、last_name
)クエリ1と2はそれを使用しますが、クエリ#3は使用しません。インデックスが(last_name
の場合) 、first_name
)クエリ1と3はそれを使用しますが、クエリ#2は使用しません。 WHERE句内で条件の順序を変更しても、どちらの場合も効果はありません。
詳細は
更新 :
上記が明確でない場合-MySQLは、クエリ条件の列がインデックスの左端のプレフィックスを形成する場合にのみインデックスを使用できます。上記のクエリ#2は使用できません(last_name
、first_name
)first_name
のみに基づいているためインデックス およびfirst_name
(last_name
の左端のプレフィックスではありません 、first_name
)インデックス。
クエリ内の条件の順序は重要ではありません。上記のクエリ#1は(last_name
を使用できるようになります 、first_name
)条件がfirst_name
であるため、インデックスは問題ありません およびlast_name
そして、これらを合わせると、(last_name
の左端のプレフィックスを形成します。 、first_name
)インデックス。