J'ai un tableau ci-dessous:Est-ce que l'ordre des colonnes des index multi-colonnes dans where where est important dans MySQL?
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;
Je veux savoir, si j'exécute les deux requêtes SQL suivantes, ont-ils les mêmes performances?
mysql> select * from student where name='John' and city='NewYork';
mysql> select * from student where city='NewYork' and name='John';
question Impliquez:
- S'il y a un index à plusieurs colonnes (nom, ville), les deux font SQLs tout l'utiliser?
- L'optimiseur change-t-il le second sql en premier à cause de l'index?
J'exercerai expliquer sur les deux d'entre eux, le résultat est ci-dessous:
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> expliquer select * de l'étudiant où la ville = 'NewYork' et name = 'John';
+----+-------------+---------+-------+---------------+---------+---------+-------------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+-------+---------------+---------+---------+-------------+------+-------+
| 1 | SIMPLE | student | const | PRIMARY | PRIMARY | 184 | const,const | 1 | NULL |
+----+-------------+---------+-------+---------------+---------+---------+-------------+------+-------+
L'ordre des colonnes dans un index à plusieurs colonnes est important. Un index sur les colonnes 'name' et' city' peut être utilisé à la place d'un index sur la colonne 'name' mais il ne peut pas être utilisé à la place d'un index sur la colonne' city'. L'ordre des conditions dans la clause 'WHERE' n'a pas d'importance. – axiac
Bienvenue dans Stack Overflow. Vous avez fait du bon travail en posant votre première question. –
Livre de recettes: http://mysql.rjweb.org/doc.php/index_cookbook_mysql –