J'essaie de «bin» tous mes clients en fonction du nombre d'articles achetés, et afficher les comptes de chaque bac. J'essaie de voir combien de personnes (account_id) ont acheté un article, combien ont acheté deux articles, tout le long de neuf articles, puis dix ou plus.mysql agrégat simple des résultats de la sous-requête est lente
Voici la requête que j'utilise - pour ce que ça vaut, je m'attendrais à ce que la requête effectue un scan complet de la table sur les ventes afin de générer les résultats, mais l'ensemble du processus prend une éternité!
Je viens d'un arrière-plan Oracle et j'ai écrit la requête comme je le ferais dans Oracle.
select thecnt
, count(*)
from (select count(*)
, case when count(*) >= 10 then 'tenormore' else cast(count(*) as char) end thecnt
from sales
where created >= SUBDATE(CURRENT_DATE(), INTERVAL 60 DAY)
group by account_id) sub
group by thecnt
order by thecnt;
y a-t-il des pièges dans mysql quand il s'agit de sous-requêtes?
expliquer le plan
+----+-------------+-------------------+-------+---------------+---------+---------+------+---------+----------+-----------------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------------------+-------+---------------+---------+---------+------+---------+----------+-----------------------------------------------------------+
| 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 2143248 | 100.00 | Using temporary; Using filesort |
| 2 | DERIVED | sales | range | created | created | 8 | NULL | 2012492 | 100.00 | Using where; Using index; Using temporary; Using filesort |
+----+-------------+-------------------+-------+---------------+---------+---------+------+---------+----------+-----------------------------------------------------------+
2 rows in set, 1 warning (1 hour 4 min 6.14 sec)
mysql> describe sales;
+-----------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+---------------------+------+-----+---------+-------+
| account_id | char(36) | NO | PRI | NULL | |
| created | datetime | NO | MUL | NULL | |
| histogram_value | bigint(20) unsigned | NO | PRI | NULL | |
+-----------------+---------------------+------+-----+---------+-------+
Pourriez-vous poster le résultat de 'EXPLAIN EXTENDED SELECT ...', s'il vous plaît Neil. –