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
    
已邀请:
第一个SELECT真的必要吗?
SELECT
  AVG(time)
FROM 
(
  SELECT
    UNIX_TIMESTAMP(max(datelast)) - UNIX_TIMESTAMP(min(datestart)) AS time
  FROM
    table
  WHERE
    product_id = 12394 AND datelast > \'2011-04-13 00:26:59\'
  GROUP BY
    id
)
我现在无法测试,我认为它也可以工作。否则,您的查询看起来不错。 您可以通过添加(datelast,product_id)键(始终将限制性最强的字段放在第一位,以提高选择性)来优化查询。     

要回复问题请先登录注册