我有以下表格: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 –