首先,我为这个问题的“新手”性质道歉。我在堆栈交换上看到了许多其他慢子查询问题,但我不确定如何将修复程序应用于我的问题。除了简单的选择、插入等之外,我对任何 SQL 都很陌生。
我有一个打印机监控系统,它每五分钟将其结果记录到 MySQL 表 (trends_uint) 中,用于一系列设备。它记录:设备 id (itemid)、时间戳 (clock) 和打印的页面 (value_avg)。从 PhpMyAdmin 我可以看到表索引是 itemid 和时钟的组合,我猜它们一起提供了一个独特的值。到目前为止,该表大约有 200 万行。
我的查询如下:
SELECT
tu1.itemid AS trends_uint_itemid,
tu1.clock AS time_value,
tu1.value_avg AS pages
FROM
trends_uint tu1
WHERE
(tu1.clock = (
SELECT max(tu2.clock)
FROM trends_uint tu2
WHERE tu1.itemid = tu2.itemid
)
)
ORDER BY tu1.clock DESC;
我想要做的是为每个设备(itemid)选择最新的值(即最高时钟的 value_avg),这样我就有希望绘制出每台打印机迄今为止打印的页数。
我尝试为返回以下内容的查询运行 EXPLAIN:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY tu1 ALL NULL NULL NULL NULL 1527815 Using where; Using filesort
2 DEPENDENT SUBQUERY tu2 ref PRIMARY PRIMARY 8 zabbix.tu1.itemid 115301 Using index
任何帮助,将不胜感激。提前致谢。