Comment puis-je persuader cette requête MySQL pour utiliser les index?
-
14-11-2019 - |
Question
Vous trouverez ci-dessous l'explication de la requête en question.
mysql> EXPLAIN SELECT orders_0.id, orders_0.created_at, orders_0.total_amount, orders_0.delivery_date, orders_0.customer_id, orders_0.items_summary, orders_0.site_id, orders_0.depot_id, orders_0.region_id, addresses_0.country, orders_0.payment_status, orders_0.created_by, orders_0.status, orders_0.delivered_by
-> FROM production.addresses addresses_0, production.orders orders_0
-> WHERE orders_0.delivery_address_id = addresses_0.id AND ((orders_0.status Not In ('cancelled','checkout','expired')) AND (orders_0.delivery_date>{d '2011-10-31'}));
+----+-------------+-------------+--------+------------------------------------------+---------+---------+-----------------------------------------------+--------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------+--------+------------------------------------------+---------+---------+-----------------------------------------------+--------+-------------+
| 1 | SIMPLE | orders_0 | ALL | status,delivery_date,delivery_address_id | NULL | NULL | NULL | 929330 | Using where |
| 1 | SIMPLE | addresses_0 | eq_ref | PRIMARY | PRIMARY | 4 | production.orders_0.delivery_address_id | 1 | |
+----+-------------+-------------+--------+------------------------------------------+---------+---------+-----------------------------------------------+--------+-------------+
2 rows in set (0.00 sec)
mysql>
J'ai des index sur les trois colonnes qu'il essaie de faire où les conditions, mais malheureusement, il n'essaie pas d'utiliser une fusion d'index. Est-ce la seule option pour créer un index multi-colonnes ou y a-t-il quelque chose qui décourage MySQL en utilisant ces index?
La solution
Vous devez créer un index multi-colonnes.
Par exemple, pour ce faire dans phpmyadmin, vous devez vérifier ces différents champs de votre table et cliquer sur le bouton «Index» sous la structure du tableau.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow