Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 缓慢获取与每行参数相关的最大值和最小值_Mysql_Max - Fatal编程技术网

Mysql 缓慢获取与每行参数相关的最大值和最小值

Mysql 缓慢获取与每行参数相关的最大值和最小值,mysql,max,Mysql,Max,我需要得到一些跟踪数据,包括一些最大值和最小值。下面我已经有了一个很糟糕的方法,但是正如你所知道的,这非常慢,因为我使用子查询,而表有几千行。具体来说,我需要根据当前行的类型获得不同的每行最大值。有了24000条记录,它就变得不可用了,而且我认为当我尝试使用MAX子句时,速度会更慢 SELECT dt.some_data, dt.date_visit, dt.url, (SELECT date_visit FROM device_tracker WHERE type

我需要得到一些跟踪数据,包括一些最大值和最小值。下面我已经有了一个很糟糕的方法,但是正如你所知道的,这非常慢,因为我使用子查询,而表有几千行。具体来说,我需要根据当前行的类型获得不同的每行最大值。有了24000条记录,它就变得不可用了,而且我认为当我尝试使用MAX子句时,速度会更慢

SELECT dt.some_data, dt.date_visit, dt.url, 
      (SELECT date_visit FROM device_tracker 
       WHERE type_dev = dt.type_dev ORDER BY date_visit DESC LIMIT 1) last_visit,
      (SELECT date_visit FROM device_tracker 
       WHERE type_dev = dt.type_dev and url = dt.url ORDER BY date_visit DESC LIMIT 1) last_visit_to_this_url 
   FROM device_tracker dt WHERE some_where_clauses;
请注意,我不需要全局最大值(这可能非常简单),但例如,在本例中,我将获得每种类型的最大日期(每一行可以是不同的类型,也可以不是不同的类型)以及关于每一行的某个url的最大日期

我需要同样的最小日期

当然,有很多更好的方法可以做到这一点。有人能解释一下吗

SELECT  *
FROM    (
        SELECT  type_dev, MAX(date_visit) AS maxt, MIN(date_visit) AS mint
        FROM    device_tracker
        GROUP BY
                type_dev
        ) t
JOIN    (
        SELECT  type_dev, url, MAX(date_visit) AS maxtu, MIN(date_visit) AS mintu
        FROM    device_tracker
        GROUP BY
                type_dev, url
        ) tu
ON      tu.type_dev = t.type_dev
JOIN    device_tracker dt
ON      dt.type_dev = tu.type_dev
        AND dt.url = tu.url
上创建一个复合索引(键入\u dev、url、date\u visit)
,以便快速运行


上创建一个复合索引(键入_dev,url,date\u visit)
,这样可以快速工作。

这太棒了。工作得很有魅力。即使没有综合指数,速度也要快得多。谢谢大家!@贾维尔:试着添加一个复合索引,看看有什么不同。实际上我已经这么做了,我的意思是,在设置索引之前,你的解决方案我就看到了巨大的差异。设置后,它甚至更好一点。谢谢这太神奇了。工作得很有魅力。即使没有综合指数,速度也要快得多。谢谢大家!@贾维尔:试着添加一个复合索引,看看有什么不同。实际上我已经这么做了,我的意思是,在设置索引之前,你的解决方案我就看到了巨大的差异。设置后,它甚至更好一点。谢谢