0
Правильно так, согласно одному из моих последних вопросов here i finnaly придумал этот запрос, который в основном тянет любого пользователя, который сделал более 100 загрузок за 24 часа.mysql выбор между запросом времени запроса оптимизация
SELECT *,
users.userid AS IP,
MAX(ucount)
FROM (SELECT t1.user_id,
t1.data DE,
ADDTIME(t1.data,'24:00:00') A,
(SELECT COUNT(1)
FROM downloads t2
WHERE t1.user_id = t2.user_id
AND t1.data <= t2.data
AND ADDTIME(t1.data,'24:00:00') >= t2.data) ucount
FROM downloads t1) t3
LEFT JOIN users ON users.id = t3.user_id
WHERE ucount > 100
GROUP BY IP
вещь, имея таблицу загрузок с ~ 40k записи и таблицы пользователей с ~ 9K РИК это то, что я получаю производительность мудрое:
8 rows in set (9.18 sec)
И если на то пошло, то EXPLAIN приходит Лик это
+----+--------------------+------------+--------+---------------+---------+---------+-----------------------+-------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+------------+--------+---------------+---------+---------+-----------------------+-------+----------------------------------------------+
| 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 38949 | Using where; Using temporary; Using filesort |
| 1 | PRIMARY | users | eq_ref | PRIMARY | PRIMARY | 4 | t3.user_id | 1 | |
| 2 | DERIVED | t1 | ALL | NULL | NULL | NULL | NULL | 38949 | |
| 3 | DEPENDENT SUBQUERY | t2 | ref | users,data | users | 4 | admin_beta.t1.user_id | 5 | Using where |
+----+--------------------+------------+--------+---------------+---------+---------+-----------------------+-------+----------------------------------------------+
4 rows in set (8.90 sec)
Как я могу улучшить такой запрос?
Это экономит ~ 1 секунду;), но это будет больше секунды, поскольку он растет, я думаю ... На данный момент это мой лучший снимок! – eduardev