Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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 - Fatal编程技术网

Mysql 查询中的相关计数

Mysql 查询中的相关计数,mysql,Mysql,我们有78个广告按钮在我们的网站上,并已从主数据库的大小原因分离的统计数据。每次点击一个按钮,我们都会进行记录,我在一个统计屏幕上工作,可以快速获取信息 上面的查询可以工作,但运行起来需要4000秒(字面意思),如何才能更有效地获得相同的结果 以以下方式运行查询: SELECT buttonID, live, title, image, (SELECT COUNT(*) FROM otherdb.buttonclicks t2 WHERE t2.butt

我们有78个广告按钮在我们的网站上,并已从主数据库的大小原因分离的统计数据。每次点击一个按钮,我们都会进行记录,我在一个统计屏幕上工作,可以快速获取信息

上面的查询可以工作,但运行起来需要4000秒(字面意思),如何才能更有效地获得相同的结果

以以下方式运行查询:

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;
速度更快,但由于WHERE子句的原因,只能拾取过去三个月内单击过的按钮(我们将旧的单击存档)


解决方案?

尝试在buttons和buttonclicks表上创建索引,以便查询可以向前查看所需字段。

尝试此查询

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

我还观察到你有一个图像场。我认为查询速度很慢,因为它是一种处理图像对象的blob类型。

您能
描述
按钮图标和按钮吗?您是否正确设置了idex?在第二个查询中使用LEFT而不是INNER buttonID是buttonclicks的索引,buttonID是buttonclicks的索引buttons@symcbean试过了,但是WHERE子句仍然会影响结果,因为上面提到的buttonid是buttonclicks上的索引,buttonid是buttonclicks上的索引,buttonid是buttonid,buttonid是ButtonChange,在连接中将内部向左移动,我们得到了一个赢家谢谢你,布莱恩。
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