首先,我对此问题的“新手”式性质表示歉意。我在堆栈交换中看到了许多其他缓慢子查询的问题,但我不确定如何将修复应用于我的问题。我是相当新的超越简单的选择,插入任何SQL等SQL - 缓慢子查询
我有记录其结果到MySQL表(trends_uint)每五分钟了各种设备的打印机监控系统。它记录:设备ID(itemid),时间戳(时钟)和打印的页面(value_avg)。从PhpMyAdmin我可以看到表索引是itemid和clock的组合,我猜测它们共同提供了一个独特的值。到目前为止,这个表有大约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;
我想要做的,就是选择了最新的值(即value_avg的最高时钟)为每个设备(itemid的),所以我可以希望绘制出每台打印机到目前为止打印的页数。
我试着运行它返回以下查询的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
任何帮助,将不胜感激。提前致谢。
这样做诀窍:)。感谢您的及时答复,并链接到SQL小提琴。我知道那里有一个JS Fiddle网站,所以我应该为了一个SQL小提琴而猎杀:) – Vasudaprime 2013-03-26 14:11:42