Tenho uma tabela com esta estrutura:
mysql> describe user_groups;
+----------+----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+----------------+
| id | int(11) unsigned | NO | MUL | NULL | auto_increment |
| user_id | int(11) unsigned | NO | PRI | NULL | |
| group_id | smallint(5) unsigned | NO | PRI | NULL | |
+----------+----------------------+------+-----+---------+----------------+
chave primária desta tabela é: PRIMARY(user_id, group_id) Tenho uma consulta simples:
mysql> EXPLAIN SELECT `UserGroup`.`user_id` , `UserGroup`.`group_id` FROM `user_groups` AS `UserGroup` WHERE `UserGroup`.`user_id` IN ( 1, 2 );
+----+-------------+-----------+-------+---------------+---------+---------+------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------+-------+---------------+---------+---------+------+------+--------------------------+
| 1 | SIMPLE | UserGroup | range | PRIMARY | PRIMARY | 4 | NULL | 4 | Using where; Using index |
+----+-------------+-----------+-------+---------------+---------+---------+------+------+--------------------------+
ele tem using where;
, de acordo com a busca de disco adicional, eu conheço using where;
o conceito e também sei que não é terrível, mas conceitualmente quero saber por que essa consulta tem using where;
, embora a condição esteja diretamente na chave primária e não tenha ordem ou qualquer coisa que cause using where;
. Como posso consertar isso using where;
?
Veja a documentação .
Resumindo, sua consulta está funcionando conforme o esperado e não está executando uma busca de disco adicional.