mysql - 获取与每行参数相关的最大值和最小值很慢

标签 mysql max

我需要获取特定的跟踪数据,包括一些最大值和最小值。我在下面已经有了一个可怕的方法,但正如你所知,这真的很慢,因为我使用的是子查询,而且该表有几千行。具体来说,我需要根据当前行的 type_dev 获取每行不同的 MAX 值。有 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;

请注意,我不需要全局最大值(这可能真的很容易),但是例如在这种情况下,我正在获取每个 type_dev 的最大日期(每一行可以是不同的类型,也可以不是)以及关于每一行的特定 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

(type_dev, url, date_visit) 上创建复合索引,以便快速运行。

关于mysql - 获取与每行参数相关的最大值和最小值很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5393511/

相关文章:

mysql - 查找计数中的最大值

php - 计算 php 和 mysql 中某个日期范围内每个州的条目总数

mysql - 运行 automysqlbackup 时出错

创建表的PHP脚本

php - MySQL - 如何从最小/最大值获取最小/最大日期

c - 如何确定程序可以使用 unsigned long long 计算阶乘的最大值?

php - SELECT * FROM `users` 仅返回第一个用户

PHP 计算日期格式已更改的 mysql 行

python - 如何找到 n 维 numpy 数组的第 i 个最大元素的索引?

java - 查找 App Engine 数据存储区列中的最大值