Je viens permis au log lent (+ ne pas utiliser les index) et que je reçois des centaines d'entrées pour le même genre de requête (seulement user
changements)MySQL n'utilisant des index
SELECT id
, name
FROM `all`
WHERE id NOT IN(SELECT id
FROM `picks`
WHERE user=999)
ORDER BY name ASC;
EXPLAIN donne:
+----+--------------------+-------------------+-------+------------------+--------+---------+------------+------+------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+-------------------+-------+------------------+--------+---------+------------+------+------------------------------------------+
| 1 | PRIMARY | all | index | NULL | name | 156 | NULL | 209 | Using where; Using index; Using filesort |
| 2 | DEPENDENT SUBQUERY | picks | ref | user,user_2,pick | user_2 | 8 | const,func | 1 | Using where; Using index |
+----+--------------------+-------------------+-------+------------------+--------+---------+------------+------+------------------------------------------+
Une idée sur la façon d'optimiser cette requête? J'ai essayé avec un tas d'index différents sur des champs différents mais rien.
Cela obtiendra tous les choix appartenant à un utilisateur, sauf le 999, non? Ce que la requête fait (mais pas d'une manière efficace) obtient la liste des choix 'disponibles' mais enlève ceux déjà choisis par l'utilisateur. –
Cette requête ne retournerait rien pour les lignes qui n'ont pas d'entrée correspondante dans 'picks', alors que la requête d'origine le ferait. –
assez simple corriger, juste externe rejoindre. – northpole