mysql where过滤条件中and连接的两个条件的顺序不必和建立的联合索引的字段顺序一致
aa表
mysql> select * from aa; +------+--------+--------+ | id | name | other | +------+--------+--------+ | 1 | asdf | dfdfd | | 2 | sdf | fdfd | | 3 | dfasdf | dfdasd | | 4 | fasdf | fdasd | | 5 | asdf | dasd | | 6 | bsdf | hell0 | +------+--------+--------+
联合索引
mysql> show index from aa; +-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | +-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ | aa | 1 | aa_id_name | 1 | id | A | 2 | NULL | NULL | YES | BTREE | | | aa | 1 | aa_id_name | 2 | name | A | 2 | NULL | NULL | YES | BTREE | | +-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
执行计划
mysql> explain select * from aa where id = 5 and name = 'asdf'; +----+-------------+-------+------+------------------------+------------+---------+-------------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+------------------------+------------+---------+-------------+------+-------------+ | 1 | SIMPLE | aa | ref | aa_id_name,idx_id_name | aa_id_name | 24 | const,const | 1 | Using where | +----+-------------+-------+------+------------------------+------------+---------+-------------+------+-------------+ 1 row in set (0.02 sec) mysql> explain select * from aa where name = 'asdf' and id = 5; +----+-------------+-------+------+------------------------+------------+---------+-------------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+------------------------+------------+---------+-------------+------+-------------+ | 1 | SIMPLE | aa | ref | aa_id_name,idx_id_name | aa_id_name | 24 | const,const | 1 | Using where | +----+-------------+-------+------+------------------------+------------+---------+-------------+------+-------------+ 1 row in set (0.00 sec)
总结:不管where过滤条件中id在前还是name在前都是用了联合索引