我有以下表格:MySQL中where子句中的多列索引列的顺序是否重要?
CREATE TABLE `student` (
`name` varchar(30) NOT NULL DEFAULT '',
`city` varchar(30) NOT NULL DEFAULT '',
`age` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`name`,`city`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我想知道,如果我执行以下两条sql语句,他们有相同的性能?
mysql> select * from student where name='John' and city='NewYork';
mysql> select * from student where city='NewYork' and name='John';
棘手的的问题:
- 如果有一个多列索引(名称,市),做两个SQLS都在使用它?
- 由于索引,优化器是否将第二个sql更改为第一个?
我执行对他们两个解释,结果如下:
mysql> explain select * from student where name='John' and city='NewYork';
+----+-------------+---------+-------+---------------+---------+---------+-------------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+-------+---------------+---------+---------+-------------+------+-------+
| 1 | SIMPLE | student | const | PRIMARY | PRIMARY | 184 | const,const | 1 | NULL |
+----+-------------+---------+-------+---------------+---------+---------+-------------+------+-------+
的mysql>解释SELECT * FROM学生,在城市= '纽约' 和名称= '约翰';
+----+-------------+---------+-------+---------------+---------+---------+-------------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+-------+---------------+---------+---------+-------------+------+-------+
| 1 | SIMPLE | student | const | PRIMARY | PRIMARY | 184 | const,const | 1 | NULL |
+----+-------------+---------+-------+---------------+---------+---------+-------------+------+-------+
多列索引中列的顺序很重要。可以使用'name'和'city'列上的索引来代替'name'列上的索引,但不能使用列'city'上的索引。 WHERE条件中的条件顺序无关紧要。 – axiac
欢迎来到Stack Overflow。问你第一个问题你做得很好。 –
索引食谱:http://mysql.rjweb.org/doc.php/index_cookbook_mysql –