SELECT
buttonID,
live,
title,
image,
(SELECT COUNT(*)
FROM otherdb.buttonclicks t2
WHERE t2.buttonid = t1.buttonID AND t2.`type`=0) as count
FROM buttons t1
GROUP BY buttonID
ORDER BY live DESC, buttonID ASC;
我们网站上有78个广告按钮,并且出于尺寸原因将统计信息与主数据库分开。我们每次点击其中一个按钮时都会记录,并且我正在处理可以快速提取信息的统计屏幕。
以上查询有效,但需要4000秒(字面意思)才能运行,如何才能更有效地获得相同的结果。
将查询运行为:
SELECT
buttons.buttonID,
buttons.live,
buttons.title,
buttons.image,
count(buttonclicks.id) as count
FROM buttons INNER JOIN otherdb.buttonclicks ON buttons.buttonID = buttonclicks.buttonid
WHERE buttonclicks.type=0
GROUP BY buttons.buttonID
ORDER BY buttons.live DESC, buttons.buttonID ASC
速度更快,但由于WHERE子句的原因,只能选取过去三个月内点击过的按钮(我们存档较旧的点击次数)。
解决方案?
答案 0 :(得分:0)
尝试在按钮和buttonclicks表上创建索引,以便查询在所需的字段中向前看。
答案 1 :(得分:0)
尝试此查询。
SELECT tbl1.buttonID,
tbl1.live,
tbl1.title,
tbl1.image,
COUNT(tbl2.buttonid) as count
FROM buttons AS tbl1
INNER JOIN (SELECT buttonid FROM otherdb.buttonclicks b WHERE b.type=0) tbl2
ON tbl1.buttonID = tbl2.buttonid
GROUP BY tbl1.buttonID
ORDER BY tbl1.live DESC, tbl1.buttonID ASC
我还观察到你有一个图像区域。我认为查询因此而变慢,因为它是处理图像对象的blob类型。