クエリ条件が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 )インデックス。