Mysql优化查询:尝试获取子查询的平均值
||
我有以下查询:
SELECT AVG(time) FROM
(SELECT UNIX_TIMESTAMP(max(datelast)) - UNIX_TIMESTAMP(min(datestart)) AS time
FROM table
WHERE id IN
(SELECT DISTINCT id
FROM table
WHERE product_id = 12394 AND datelast > \'2011-04-13 00:26:59\'
)
GROUP BY id
)
as T
查询获得最大的datelast值,并从每个ID的最大datestart值中减去该值(这是用户会话的长度),然后取平均值。
最外面的查询仅用于平均结果时间。有什么方法可以优化此查询?
EXPLAIN的输出:
id select_type table type possible_keys key key_len ref rows extra
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 7
2 DERIVED table index NULL id 16 NULL 26 Using where
3 DEPENDENT SUBQUERY table index_subquery id,product_id,datelast id 12 func 2 Using index; Using where
没有找到相关结果
已邀请:
1 个回复
田损比报
我现在无法测试,我认为它也可以工作。否则,您的查询看起来不错。 您可以通过添加(datelast,product_id)键(始终将限制性最强的字段放在第一位,以提高选择性)来优化查询。